From c9461f8b8a586aaa45b3e219466bca61f3312efb Mon Sep 17 00:00:00 2001 From: yexb <553699424@qq.com> Date: Fri, 17 Apr 2026 16:31:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Emms=E6=8E=A5=E5=8D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- entrance/pom.xml | 5 + tools/README.md | 27 +- tools/mms-mapping/pom.xml | 122 ++ .../application/MappingTaskAppService.java | 135 ++ .../command/GenerateFromIcdCommand.java | 102 ++ .../command/IndexBindingCommand.java | 51 + .../command/IndexSelectionGroupCommand.java | 43 + .../result/GenerateMappingResult.java | 42 + .../mapping/config/MappingModuleConfig.java | 52 + .../mapping/controller/MappingController.java | 50 + .../GenerateMappingFromIcdRequest.java | 89 ++ .../request/IndexBindingRequest.java | 59 + .../request/IndexSelectionGroupRequest.java | 53 + .../IndexCandidateReportItemResponse.java | 54 + .../response/IndexCandidateResponse.java | 71 + .../response/MappingDocumentResponse.java | 26 + .../response/MappingTaskResponse.java | 40 + .../converter/MappingRequestConverter.java | 82 + .../converter/MappingResponseConverter.java | 70 + .../domain/model/analysis/IndexAnalysis.java | 20 + .../domain/model/analysis/IndexCandidate.java | 113 ++ .../analysis/IndexCandidateReportItem.java | 56 + .../model/analysis/ValidationResult.java | 18 + .../mapping/domain/model/icd/DataSetNode.java | 17 + .../domain/model/icd/DoiElementNode.java | 31 + .../icd/mapping/domain/model/icd/DoiNode.java | 30 + .../mapping/domain/model/icd/FcdaNode.java | 36 + .../mapping/domain/model/icd/IcdDocument.java | 46 + .../icd/mapping/domain/model/icd/IedNode.java | 20 + .../icd/mapping/domain/model/icd/LnNode.java | 32 + .../domain/model/icd/LogicalDeviceNode.java | 14 + .../domain/model/icd/ReportControlNode.java | 29 + .../intermediate/DataSetSelectionState.java | 103 ++ .../intermediate/ReportAndDataSetState.java | 59 + .../intermediate/ReportBindingState.java | 73 + .../model/intermediate/ReportGroupState.java | 100 ++ .../model/mapping/DataSetGroupItem.java | 43 + .../mapping/domain/model/mapping/DoiItem.java | 120 ++ .../domain/model/mapping/InstItem.java | 43 + .../domain/model/mapping/MappingDocument.java | 127 ++ .../domain/model/mapping/ReportMapItem.java | 124 ++ .../mapping/domain/model/mapping/SdiItem.java | 43 + .../domain/model/mapping/TypeItem.java | 29 + .../model/template/DefaultTemplate.java | 345 ++++ .../domain/service/DefaultTemplateLoader.java | 69 + .../domain/service/IcdParserService.java | 23 + .../domain/service/IndexAnalysisService.java | 168 ++ .../service/IndexValidationService.java | 133 ++ .../service/MappingGenerationService.java | 1015 ++++++++++++ .../icd/mapping/enums/GenerateStatus.java | 13 + .../parser/SclGeneratedModelReader.java | 522 ++++++ .../parser/SclParserAdapter.java | 53 + .../parser/SclTraversalSupport.java | 61 + .../generated-com.example.scl.generated.zip | Bin 0 -> 283215 bytes .../parser/generated-package-replaced.zip | Bin 0 -> 307305 bytes .../infrastructure/parser/generated/LN0.java | 42 + .../parser/generated/ObjectFactory.java | 1398 +++++++++++++++++ .../infrastructure/parser/generated/SCL.java | 351 +++++ .../TAbstractConductingEquipment.java | 117 ++ .../generated/TAbstractDataAttribute.java | 325 ++++ .../generated/TAbstractEqFuncSubFunc.java | 150 ++ .../parser/generated/TAccessControl.java | 40 + .../parser/generated/TAccessPoint.java | 436 +++++ .../parser/generated/TAddress.java | 76 + .../TAnyContentFromOtherNamespace.java | 113 ++ .../parser/generated/TAnyLN.java | 384 +++++ .../parser/generated/TAssociation.java | 359 +++++ .../generated/TAssociationInitiator.java | 58 + .../generated/TAssociationKindEnum.java | 58 + .../parser/generated/TAuthenticationEnum.java | 67 + .../infrastructure/parser/generated/TBDA.java | 40 + .../parser/generated/TBaseElement.java | 176 +++ .../infrastructure/parser/generated/TBay.java | 145 ++ .../parser/generated/TBitRateInMbPerSec.java | 136 ++ .../parser/generated/TCert.java | 110 ++ .../parser/generated/TCertificate.java | 167 ++ .../parser/generated/TClientLN.java | 273 ++++ .../parser/generated/TClientServices.java | 623 ++++++++ .../parser/generated/TCommProt.java | 71 + .../parser/generated/TCommunication.java | 79 + .../generated/TConductingEquipment.java | 107 ++ .../parser/generated/TConfLNs.java | 100 ++ .../parser/generated/TConnectedAP.java | 287 ++++ .../parser/generated/TConnectivityNode.java | 71 + .../parser/generated/TControl.java | 157 ++ .../parser/generated/TControlBlock.java | 164 ++ .../parser/generated/TControlWithIEDName.java | 411 +++++ .../generated/TControlWithTriggerOpt.java | 111 ++ .../infrastructure/parser/generated/TDA.java | 198 +++ .../infrastructure/parser/generated/TDAI.java | 254 +++ .../parser/generated/TDAType.java | 175 +++ .../infrastructure/parser/generated/TDO.java | 193 +++ .../infrastructure/parser/generated/TDOI.java | 205 +++ .../parser/generated/TDORef.java | 395 +++++ .../parser/generated/TDOType.java | 177 +++ .../parser/generated/TDataSet.java | 163 ++ .../parser/generated/TDataTypeTemplates.java | 175 +++ .../parser/generated/TDomainLNGroupAEnum.java | 53 + .../parser/generated/TDomainLNGroupCEnum.java | 55 + .../parser/generated/TDomainLNGroupFEnum.java | 61 + .../parser/generated/TDomainLNGroupGEnum.java | 51 + .../parser/generated/TDomainLNGroupIEnum.java | 55 + .../parser/generated/TDomainLNGroupKEnum.java | 53 + .../parser/generated/TDomainLNGroupMEnum.java | 71 + .../parser/generated/TDomainLNGroupPEnum.java | 103 ++ .../parser/generated/TDomainLNGroupQEnum.java | 55 + .../parser/generated/TDomainLNGroupREnum.java | 65 + .../parser/generated/TDomainLNGroupSEnum.java | 65 + .../parser/generated/TDomainLNGroupTEnum.java | 83 + .../parser/generated/TDomainLNGroupXEnum.java | 47 + .../parser/generated/TDomainLNGroupYEnum.java | 51 + .../parser/generated/TDomainLNGroupZEnum.java | 79 + .../parser/generated/TDurationInMilliSec.java | 137 ++ .../parser/generated/TDurationInSec.java | 41 + .../parser/generated/TEnumType.java | 79 + .../parser/generated/TEnumVal.java | 123 ++ .../parser/generated/TEqFunction.java | 40 + .../parser/generated/TEqSubFunction.java | 40 + .../parser/generated/TEquipment.java | 78 + .../parser/generated/TEquipmentContainer.java | 118 ++ .../parser/generated/TExtControlCheck.java | 61 + .../parser/generated/TExtCtrl.java | 163 ++ .../parser/generated/TExtRef.java | 357 +++++ .../parser/generated/TFCDA.java | 301 ++++ .../parser/generated/TFileHandling.java | 133 ++ .../parser/generated/TFunction.java | 178 +++ .../parser/generated/TGOOSEcapabilities.java | 133 ++ .../infrastructure/parser/generated/TGSE.java | 100 ++ .../parser/generated/TGSEControl.java | 196 +++ .../parser/generated/TGSEControlTypeEnum.java | 45 + .../parser/generated/TGSESettings.java | 165 ++ .../parser/generated/TGeneralEquipment.java | 107 ++ .../generated/TGeneralEquipmentContainer.java | 117 ++ .../parser/generated/THeader.java | 441 ++++++ .../parser/generated/THeaderSclRef.java | 79 + .../parser/generated/THitem.java | 221 +++ .../parser/generated/TIDNaming.java | 113 ++ .../infrastructure/parser/generated/TIED.java | 552 +++++++ .../parser/generated/TIEDSclRef.java | 79 + .../parser/generated/TInputs.java | 79 + .../infrastructure/parser/generated/TKDC.java | 124 ++ .../parser/generated/TLDevice.java | 275 ++++ .../parser/generated/TLLN0Enum.java | 55 + .../infrastructure/parser/generated/TLN.java | 137 ++ .../infrastructure/parser/generated/TLN0.java | 213 +++ .../parser/generated/TLNode.java | 342 ++++ .../parser/generated/TLNodeContainer.java | 84 + .../parser/generated/TLNodeType.java | 174 ++ .../parser/generated/TLPHDEnum.java | 43 + .../parser/generated/TLabel.java | 130 ++ .../parser/generated/TLabels.java | 79 + .../parser/generated/TLine.java | 238 +++ .../infrastructure/parser/generated/TLog.java | 71 + .../parser/generated/TLogControl.java | 289 ++++ .../parser/generated/TLogSettings.java | 133 ++ .../parser/generated/TMcSecurity.java | 100 ++ .../generated/TMinRequestedSCDFile.java | 50 + .../generated/TMinRequestedSCDFiles.java | 79 + .../parser/generated/TNaming.java | 196 +++ .../parser/generated/TOutputs.java | 79 + .../infrastructure/parser/generated/TP.java | 121 ++ .../parser/generated/TPAPPID.java | 40 + .../parser/generated/TPC37118IPPort.java | 40 + .../parser/generated/TPDNSName.java | 40 + .../infrastructure/parser/generated/TPIP.java | 40 + .../parser/generated/TPIPClassOfTraffic.java | 40 + .../parser/generated/TPIPGATEWAY.java | 40 + .../parser/generated/TPIPIGMPv3Src.java | 40 + .../parser/generated/TPIPSUBNET.java | 40 + .../parser/generated/TPIPbase.java | 46 + .../parser/generated/TPIPv6.java | 40 + .../parser/generated/TPIPv6Base.java | 45 + .../generated/TPIPv6ClassOfTraffic.java | 40 + .../parser/generated/TPIPv6FlowLabel.java | 40 + .../parser/generated/TPIPv6GATEWAY.java | 40 + .../parser/generated/TPIPv6IGMPv3Src.java | 40 + .../parser/generated/TPIPv6SUBNET.java | 40 + .../parser/generated/TPMACAddress.java | 40 + .../parser/generated/TPMMSPort.java | 40 + .../parser/generated/TPOSIAEInvoke.java | 40 + .../parser/generated/TPOSIAEQualifier.java | 40 + .../parser/generated/TPOSIAPInvoke.java | 40 + .../parser/generated/TPOSIAPTitle.java | 50 + .../parser/generated/TPOSINSAP.java | 47 + .../parser/generated/TPOSIPSEL.java | 47 + .../parser/generated/TPOSISSEL.java | 47 + .../parser/generated/TPOSITSEL.java | 47 + .../parser/generated/TPPhysConn.java | 97 ++ .../parser/generated/TPPort.java | 46 + .../parser/generated/TPSNTPPort.java | 40 + .../parser/generated/TPTCPPort.java | 40 + .../parser/generated/TPUDPPort.java | 40 + .../parser/generated/TPVLANID.java | 40 + .../parser/generated/TPVLANPRIORITY.java | 40 + .../parser/generated/TPhaseEnum.java | 72 + .../parser/generated/TPhysConn.java | 107 ++ .../generated/TPowerSystemResource.java | 51 + .../parser/generated/TPowerTransformer.java | 177 +++ .../generated/TPowerTransformerEnum.java | 43 + .../TPredefinedAttributeNameEnum.java | 98 ++ .../generated/TPredefinedBasicTypeEnum.java | 165 ++ .../parser/generated/TPredefinedCDCEnum.java | 147 ++ ...edefinedCommonConductingEquipmentEnum.java | 93 ++ .../parser/generated/TPredefinedFCEnum.java | 67 + .../TPredefinedGeneralEquipmentEnum.java | 57 + .../generated/TPredefinedPTypeEnum.java | 137 ++ .../TPredefinedPTypePhysConnEnum.java | 64 + .../TPredefinedPhysConnTypeEnum.java | 58 + .../generated/TPredefinedSCLFileType.java | 53 + .../TPredefinedTypeOfSecurityEnum.java | 61 + .../parser/generated/TPrivate.java | 106 ++ .../parser/generated/TProcess.java | 209 +++ .../parser/generated/TProtNs.java | 108 ++ .../parser/generated/TProtocol.java | 91 ++ .../parser/generated/TRedProt.java | 131 ++ .../parser/generated/TRedProtEnum.java | 64 + .../parser/generated/TReportControl.java | 519 ++++++ .../parser/generated/TReportSettings.java | 257 +++ .../parser/generated/TRightEnum.java | 61 + .../parser/generated/TRptEnabled.java | 117 ++ .../parser/generated/TSCSM.java | 133 ++ .../infrastructure/parser/generated/TSDI.java | 208 +++ .../infrastructure/parser/generated/TSDO.java | 163 ++ .../infrastructure/parser/generated/TSMV.java | 40 + .../parser/generated/TSMVDeliveryEnum.java | 61 + .../parser/generated/TSMVSettings.java | 386 +++++ .../parser/generated/TSMVsc.java | 164 ++ .../generated/TSampledValueControl.java | 538 +++++++ .../generated/TSclFileUUIDReference.java | 220 +++ .../parser/generated/TSecurity.java | 100 ++ .../parser/generated/TServer.java | 357 +++++ .../parser/generated/TServerAt.java | 98 ++ .../generated/TServiceConfReportControl.java | 142 ++ .../generated/TServiceForConfDataSet.java | 71 + .../parser/generated/TServiceSettings.java | 107 ++ .../generated/TServiceSettingsEnum.java | 61 + .../generated/TServiceSettingsNoDynEnum.java | 58 + .../parser/generated/TServiceType.java | 62 + .../parser/generated/TServiceWithMax.java | 67 + .../TServiceWithMaxAndMaxAttributes.java | 77 + .../generated/TServiceWithMaxAndModify.java | 71 + .../generated/TServiceWithMaxNonZero.java | 63 + .../generated/TServiceWithOptionalMax.java | 67 + .../parser/generated/TServiceYesNo.java | 46 + .../parser/generated/TServices.java | 1059 +++++++++++++ .../parser/generated/TSettingControl.java | 132 ++ .../parser/generated/TSettingGroups.java | 227 +++ .../parser/generated/TSmpMod.java | 61 + .../parser/generated/TSubEquipment.java | 142 ++ .../parser/generated/TSubFunction.java | 178 +++ .../parser/generated/TSubNetwork.java | 135 ++ .../parser/generated/TSubstation.java | 112 ++ .../parser/generated/TSupSubscription.java | 79 + .../parser/generated/TSystemLNGroupEnum.java | 72 + .../parser/generated/TTapChanger.java | 180 +++ .../parser/generated/TTerminal.java | 298 ++++ .../parser/generated/TText.java | 70 + .../parser/generated/TTimeSyncProt.java | 164 ++ .../parser/generated/TTransformerWinding.java | 167 ++ .../generated/TTransformerWindingEnum.java | 43 + .../parser/generated/TTrgOps.java | 193 +++ .../parser/generated/TUnNaming.java | 107 ++ .../infrastructure/parser/generated/TVal.java | 100 ++ .../parser/generated/TValKindEnum.java | 63 + .../parser/generated/TValueHandling.java | 69 + .../parser/generated/TValueWithUnit.java | 138 ++ .../parser/generated/TVoltage.java | 41 + .../parser/generated/TVoltageLevel.java | 208 +++ .../parser/generated/package-info.java | 9 + .../serializer/MappingDocumentSerializer.java | 42 + .../storage/FileStorageService.java | 32 + .../gather/icd/mapping/utils/DateUtils.java | 17 + .../gather/icd/mapping/utils/JsonUtils.java | 22 + .../main/resources/template/DefaultCfg.txt | 756 +++++++++ tools/pom.xml | 1 + tools/wave-tool/PARSE_COMTRADE_API.md | 266 ---- .../wave/component/WaveVectorComponent.java | 2 +- 278 files changed, 35097 insertions(+), 271 deletions(-) create mode 100644 tools/mms-mapping/pom.xml create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/MappingTaskAppService.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/GenerateFromIcdCommand.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexBindingCommand.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexSelectionGroupCommand.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/result/GenerateMappingResult.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/config/MappingModuleConfig.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/GenerateMappingFromIcdRequest.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexBindingRequest.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexSelectionGroupRequest.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateReportItemResponse.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateResponse.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingDocumentResponse.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingTaskResponse.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingRequestConverter.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingResponseConverter.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexAnalysis.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidate.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidateReportItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/ValidationResult.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DataSetNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiElementNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/FcdaNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IcdDocument.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IedNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LnNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LogicalDeviceNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/ReportControlNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/DataSetSelectionState.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportAndDataSetState.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportBindingState.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportGroupState.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DataSetGroupItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DoiItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/InstItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/MappingDocument.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/ReportMapItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/SdiItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/TypeItem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/template/DefaultTemplate.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/DefaultTemplateLoader.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IcdParserService.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexAnalysisService.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexValidationService.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/MappingGenerationService.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/enums/GenerateStatus.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclGeneratedModelReader.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclParserAdapter.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclTraversalSupport.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated-com.example.scl.generated.zip create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated-package-replaced.zip create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/LN0.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/ObjectFactory.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/SCL.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractConductingEquipment.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractDataAttribute.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractEqFuncSubFunc.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessPoint.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAddress.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyContentFromOtherNamespace.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyLN.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociation.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationInitiator.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationKindEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAuthenticationEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBDA.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBaseElement.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBay.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBitRateInMbPerSec.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCert.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCertificate.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientLN.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientServices.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommProt.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommunication.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConductingEquipment.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConfLNs.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectedAP.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectivityNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlBlock.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithIEDName.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithTriggerOpt.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDA.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAI.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAType.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDO.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOI.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDORef.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOType.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataSet.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataTypeTemplates.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupAEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupCEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupFEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupGEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupIEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupKEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupMEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupPEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupQEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupREnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupSEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupTEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupXEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupYEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupZEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInMilliSec.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInSec.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumType.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumVal.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqFunction.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqSubFunction.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipment.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipmentContainer.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtControlCheck.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtCtrl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtRef.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFCDA.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFileHandling.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFunction.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGOOSEcapabilities.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSE.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControlTypeEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSESettings.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipment.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipmentContainer.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeader.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeaderSclRef.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THitem.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIDNaming.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIED.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIEDSclRef.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TInputs.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TKDC.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLDevice.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLLN0Enum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN0.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNode.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeContainer.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeType.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLPHDEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabel.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabels.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLine.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLog.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogSettings.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMcSecurity.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFile.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFiles.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TNaming.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TOutputs.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TP.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPAPPID.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPC37118IPPort.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPDNSName.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIP.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPClassOfTraffic.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPGATEWAY.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPIGMPv3Src.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPSUBNET.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPbase.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6Base.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6ClassOfTraffic.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6FlowLabel.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6GATEWAY.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6IGMPv3Src.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6SUBNET.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMACAddress.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMMSPort.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEInvoke.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEQualifier.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPInvoke.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPTitle.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSINSAP.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIPSEL.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSISSEL.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSITSEL.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPhysConn.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPort.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPSNTPPort.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPTCPPort.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPUDPPort.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANID.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANPRIORITY.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhaseEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhysConn.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerSystemResource.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformer.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformerEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedAttributeNameEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedBasicTypeEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCDCEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCommonConductingEquipmentEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedFCEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedGeneralEquipmentEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypeEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypePhysConnEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPhysConnTypeEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedSCLFileType.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedTypeOfSecurityEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPrivate.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProcess.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtNs.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtocol.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProt.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProtEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportSettings.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRightEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRptEnabled.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSCSM.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDI.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDO.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMV.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVDeliveryEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVSettings.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVsc.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSampledValueControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSclFileUUIDReference.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSecurity.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServer.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServerAt.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceConfReportControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceForConfDataSet.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettings.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsNoDynEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceType.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMax.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndMaxAttributes.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndModify.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxNonZero.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithOptionalMax.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceYesNo.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServices.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingControl.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingGroups.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSmpMod.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubEquipment.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubFunction.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubNetwork.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubstation.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSupSubscription.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSystemLNGroupEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTapChanger.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTerminal.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TText.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTimeSyncProt.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWinding.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWindingEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTrgOps.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TUnNaming.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVal.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValKindEnum.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueHandling.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueWithUnit.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltage.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltageLevel.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/package-info.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/serializer/MappingDocumentSerializer.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/storage/FileStorageService.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/DateUtils.java create mode 100644 tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/JsonUtils.java create mode 100644 tools/mms-mapping/src/main/resources/template/DefaultCfg.txt delete mode 100644 tools/wave-tool/PARSE_COMTRADE_API.md diff --git a/README.md b/README.md index 841e864..78d6454 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ CN_Tool 是一个基于 Spring Boot 的多模块后端聚合工程,当前仓 其中 `tools` 当前包含: - `activate-tool` +- `mms-mapping` - `wave-tool` ## 启动入口 @@ -29,7 +30,7 @@ CN_Tool 是一个基于 Spring Boot 的多模块后端聚合工程,当前仓 - `entrance/src/main/java/com/njcn/gather/EntranceApplication.java` -`entrance` 模块聚合了 `system`、`user`、`detection`、`activate-tool`、`wave-tool`,是当前运行时主入口。 +`entrance` 模块聚合了 `system`、`user`、`detection`、`activate-tool`、`wave-tool`、`mms-mapping`,是当前运行时主入口。 ## 技术基线 @@ -74,6 +75,8 @@ P0 已补齐基线文档,建议按以下顺序阅读: - 当前以通信基础设施为主,包含 WebSocket / Netty 相关组件 - `tools/activate-tool` - 负责激活码生成、激活码验证、许可证读取等能力 +- `tools/mms-mapping` + - 负责 ICD 文件解析与 MMS 映射数据生成能力 - `tools/wave-tool` - 负责波形文本解析与查看数据组装能力 diff --git a/entrance/pom.xml b/entrance/pom.xml index ad56706..c5cdff1 100644 --- a/entrance/pom.xml +++ b/entrance/pom.xml @@ -38,6 +38,11 @@ wave-tool 1.0.0 + + com.njcn.gather + mms-mapping + 1.0.0 + diff --git a/tools/README.md b/tools/README.md index 37b3426..8f877d2 100644 --- a/tools/README.md +++ b/tools/README.md @@ -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` 下补充模块边界与职责说明 - diff --git a/tools/mms-mapping/pom.xml b/tools/mms-mapping/pom.xml new file mode 100644 index 0000000..f61b169 --- /dev/null +++ b/tools/mms-mapping/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + + + com.njcn.gather + tools + 1.0.0 + + + mms-mapping + jar + + + + com.njcn + njcn-common + 0.0.1 + + + + com.njcn + spingboot2.3.12 + 2.3.12 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + + com.alibaba + fastjson + 1.2.83 + + + + com.fasterxml.jackson.core + jackson-databind + 2.12.0 + + + com.fasterxml.jackson.core + jackson-core + 2.12.0 + + + com.fasterxml.jackson.core + jackson-annotations + 2.12.0 + + + + jakarta.xml.bind + jakarta.xml.bind-api + 2.3.3 + + + + org.glassfish.jaxb + jaxb-runtime + 2.3.3 + + + + org.apache.poi + poi-scratchpad + 4.1.2 + + + org.apache.poi + poi + 4.1.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + + org.apache.poi + poi-ooxml + 4.1.2 + + + + org.docx4j + docx4j + 6.1.0 + + + + commons-net + commons-net + 3.10.0 + + + + + mms-mapping + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + + diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/MappingTaskAppService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/MappingTaskAppService.java new file mode 100644 index 0000000..41ed340 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/MappingTaskAppService.java @@ -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"); + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/GenerateFromIcdCommand.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/GenerateFromIcdCommand.java new file mode 100644 index 0000000..23d7479 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/GenerateFromIcdCommand.java @@ -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 indexSelection = new ArrayList(); + + 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 getIndexSelection() { + return indexSelection; + } + + public void setIndexSelection(List indexSelection) { + this.indexSelection = indexSelection; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexBindingCommand.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexBindingCommand.java new file mode 100644 index 0000000..44a065b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexBindingCommand.java @@ -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; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexSelectionGroupCommand.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexSelectionGroupCommand.java new file mode 100644 index 0000000..ad7e239 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/command/IndexSelectionGroupCommand.java @@ -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 bindings = new ArrayList(); + + 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 getBindings() { + return bindings; + } + + public void setBindings(List bindings) { + this.bindings = bindings; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/result/GenerateMappingResult.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/result/GenerateMappingResult.java new file mode 100644 index 0000000..1330121 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/application/result/GenerateMappingResult.java @@ -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 problems = new ArrayList(); + + 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 getProblems() { return problems; } + public void setProblems(List problems) { this.problems = problems; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/config/MappingModuleConfig.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/config/MappingModuleConfig.java new file mode 100644 index 0000000..3021ca7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/config/MappingModuleConfig.java @@ -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; + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java new file mode 100644 index 0000000..292057d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java @@ -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. icdFile:ICD 文件 + * 2. request:JSON 请求体 + */ + @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); + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/GenerateMappingFromIcdRequest.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/GenerateMappingFromIcdRequest.java new file mode 100644 index 0000000..e9f86de --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/GenerateMappingFromIcdRequest.java @@ -0,0 +1,89 @@ +package com.njcn.gather.icd.mapping.controller.request; + +import java.util.ArrayList; +import java.util.List; + +/** + * 生成映射接口请求体。 + * + * 说明: + * 1. 旧版结构中,indexSelection 是 Map,只能表达“一个报告对应一个值”, + * 无法表达“一个业务分组下有多个报告、一个报告下又有多条标签绑定”的真实场景。 + * 2. 新版结构改成 List,用来完整承载用户在前端完成的绑定结果。 + * 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 indexSelection = new ArrayList(); + + 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 getIndexSelection() { + return indexSelection; + } + + public void setIndexSelection(List indexSelection) { + this.indexSelection = indexSelection; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexBindingRequest.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexBindingRequest.java new file mode 100644 index 0000000..7f64576 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexBindingRequest.java @@ -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; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexSelectionGroupRequest.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexSelectionGroupRequest.java new file mode 100644 index 0000000..5d2b77e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/request/IndexSelectionGroupRequest.java @@ -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 bindings = new ArrayList(); + + 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 getBindings() { + return bindings; + } + + public void setBindings(List bindings) { + this.bindings = bindings; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateReportItemResponse.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateReportItemResponse.java new file mode 100644 index 0000000..687b7ff --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateReportItemResponse.java @@ -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 availableLnInstValues = new ArrayList(); + + 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 getAvailableLnInstValues() { + return availableLnInstValues; + } + + public void setAvailableLnInstValues(List availableLnInstValues) { + this.availableLnInstValues = availableLnInstValues; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateResponse.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateResponse.java new file mode 100644 index 0000000..d6c9f74 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/IndexCandidateResponse.java @@ -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 templateLabels = new ArrayList(); + + /** 当前分组下的报告候选列表。 */ + private List reports = new ArrayList(); + + 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 getTemplateLabels() { + return templateLabels; + } + + public void setTemplateLabels(List templateLabels) { + this.templateLabels = templateLabels; + } + + public List getReports() { + return reports; + } + + public void setReports(List reports) { + this.reports = reports; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingDocumentResponse.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingDocumentResponse.java new file mode 100644 index 0000000..31fcfd9 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingDocumentResponse.java @@ -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; } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingTaskResponse.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingTaskResponse.java new file mode 100644 index 0000000..1b10c01 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/response/MappingTaskResponse.java @@ -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 indexCandidates = new ArrayList(); + private List problems = new ArrayList(); + 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 getIndexCandidates() { return indexCandidates; } + public void setIndexCandidates(List indexCandidates) { this.indexCandidates = indexCandidates; } + public List getProblems() { return problems; } + public void setProblems(List problems) { this.problems = problems; } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingRequestConverter.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingRequestConverter.java new file mode 100644 index 0000000..d57d816 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingRequestConverter.java @@ -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(); + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingResponseConverter.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingResponseConverter.java new file mode 100644 index 0000000..ff6844a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/converter/MappingResponseConverter.java @@ -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; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexAnalysis.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexAnalysis.java new file mode 100644 index 0000000..dd3f714 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexAnalysis.java @@ -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 candidates = new ArrayList(); + private List problems = new ArrayList(); + + public List getCandidates() { return candidates; } + public void setCandidates(List candidates) { this.candidates = candidates; } + public List getProblems() { return problems; } + public void setProblems(List problems) { this.problems = problems; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidate.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidate.java new file mode 100644 index 0000000..957ca83 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidate.java @@ -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 templateLabels = new ArrayList(); + + /** 当前分组下匹配到的报告列表。 */ + private List reports = new ArrayList(); + + /** + * 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 getTemplateLabels() { + return templateLabels; + } + + public void setTemplateLabels(List templateLabels) { + this.templateLabels = templateLabels; + } + + public List getReports() { + return reports; + } + + public void setReports(List 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; + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidateReportItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidateReportItem.java new file mode 100644 index 0000000..3620ae7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/IndexCandidateReportItem.java @@ -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 availableLnInstValues = new ArrayList(); + + 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 getAvailableLnInstValues() { + return availableLnInstValues; + } + + public void setAvailableLnInstValues(List availableLnInstValues) { + this.availableLnInstValues = availableLnInstValues; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/ValidationResult.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/ValidationResult.java new file mode 100644 index 0000000..1ed5c89 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/analysis/ValidationResult.java @@ -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 problems = new ArrayList(); + + public boolean isValid() { return valid; } + public void setValid(boolean valid) { this.valid = valid; } + public List getProblems() { return problems; } + public void setProblems(List problems) { this.problems = problems; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DataSetNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DataSetNode.java new file mode 100644 index 0000000..04e7a31 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DataSetNode.java @@ -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 fcdas = new ArrayList(); + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public List getFcdas() { return fcdas; } + public void setFcdas(List fcdas) { this.fcdas = fcdas; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiElementNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiElementNode.java new file mode 100644 index 0000000..23cf301 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiElementNode.java @@ -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 values = new ArrayList(); + private List children = new ArrayList(); + + 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 getValues() { return values; } + public void setValues(List values) { this.values = values; } + public List getChildren() { return children; } + public void setChildren(List children) { this.children = children; } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiNode.java new file mode 100644 index 0000000..51f7a37 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/DoiNode.java @@ -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 children = new ArrayList(); + + 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 getChildren() { return children; } + public void setChildren(List children) { this.children = children; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/FcdaNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/FcdaNode.java new file mode 100644 index 0000000..db985bf --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/FcdaNode.java @@ -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; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IcdDocument.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IcdDocument.java new file mode 100644 index 0000000..d3aed97 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IcdDocument.java @@ -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 logicalNodes = new ArrayList(); + private List reportControls = new ArrayList(); + private Map dataSets = new LinkedHashMap(); + + 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 getLogicalNodes() { return logicalNodes; } + public void setLogicalNodes(List logicalNodes) { this.logicalNodes = logicalNodes; } + public List getReportControls() { return reportControls; } + public void setReportControls(List reportControls) { this.reportControls = reportControls; } + public Map getDataSets() { return dataSets; } + public void setDataSets(Map dataSets) { this.dataSets = dataSets; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IedNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IedNode.java new file mode 100644 index 0000000..efc1a35 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/IedNode.java @@ -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 accessPointNames = new ArrayList(); + private List lDeviceInstList = new ArrayList(); + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public List getAccessPointNames() { return accessPointNames; } + public void setAccessPointNames(List accessPointNames) { this.accessPointNames = accessPointNames; } + public List getLDeviceInstList() { return lDeviceInstList; } + public void setLDeviceInstList(List lDeviceInstList) { this.lDeviceInstList = lDeviceInstList; } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LnNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LnNode.java new file mode 100644 index 0000000..f106aa4 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LnNode.java @@ -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 doiList = new ArrayList(); + + 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 getDoiList() { return doiList; } + public void setDoiList(List doiList) { this.doiList = doiList; } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LogicalDeviceNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LogicalDeviceNode.java new file mode 100644 index 0000000..07a47c2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/LogicalDeviceNode.java @@ -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; } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/ReportControlNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/ReportControlNode.java new file mode 100644 index 0000000..476295d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/icd/ReportControlNode.java @@ -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; } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/DataSetSelectionState.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/DataSetSelectionState.java new file mode 100644 index 0000000..14d8f84 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/DataSetSelectionState.java @@ -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 lnNodes = new ArrayList(); + + 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 getLnNodes() { + return lnNodes; + } + + public void setLnNodes(List lnNodes) { + this.lnNodes = lnNodes; + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportAndDataSetState.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportAndDataSetState.java new file mode 100644 index 0000000..d4b7950 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportAndDataSetState.java @@ -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 reportGroups = new ArrayList(); + + /** 数据集选择状态列表。 */ + private List dataSetSelections = new ArrayList(); + + 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 getReportGroups() { + return reportGroups; + } + + public void setReportGroups(List reportGroups) { + this.reportGroups = reportGroups; + } + + public List getDataSetSelections() { + return dataSetSelections; + } + + public void setDataSetSelections(List dataSetSelections) { + this.dataSetSelections = dataSetSelections; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportBindingState.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportBindingState.java new file mode 100644 index 0000000..e433073 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportBindingState.java @@ -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; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportGroupState.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportGroupState.java new file mode 100644 index 0000000..385c303 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/intermediate/ReportGroupState.java @@ -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 reportItems = new ArrayList(); + + /** 用户最终确认的绑定关系。 */ + private List bindings = new ArrayList(); + + 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 getReportItems() { + return reportItems; + } + + public void setReportItems(List reportItems) { + this.reportItems = reportItems; + } + + public List getBindings() { + return bindings; + } + + public void setBindings(List bindings) { + this.bindings = bindings; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DataSetGroupItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DataSetGroupItem.java new file mode 100644 index 0000000..e6cf35f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DataSetGroupItem.java @@ -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 instList = new ArrayList(); + + 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 getInstList() { + return instList; + } + + public void setInstList(List instList) { + this.instList = instList; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DoiItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DoiItem.java new file mode 100644 index 0000000..1aa5f35 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/DoiItem.java @@ -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 sdiList = new ArrayList(); + + 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 getSdiList() { + return sdiList; + } + + public void setSdiList(List sdiList) { + this.sdiList = sdiList; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/InstItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/InstItem.java new file mode 100644 index 0000000..5e30e02 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/InstItem.java @@ -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 doiList = new ArrayList(); + + 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 getDoiList() { + return doiList; + } + + public void setDoiList(List doiList) { + this.doiList = doiList; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/MappingDocument.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/MappingDocument.java new file mode 100644 index 0000000..a029389 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/MappingDocument.java @@ -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 reportMap = new ArrayList(); + + @JsonProperty("DataSetList") + private List dataSetList = new ArrayList(); + + 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 getReportMap() { + return reportMap; + } + + public void setReportMap(List reportMap) { + this.reportMap = reportMap; + } + + public List getDataSetList() { + return dataSetList; + } + + public void setDataSetList(List dataSetList) { + this.dataSetList = dataSetList; + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/ReportMapItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/ReportMapItem.java new file mode 100644 index 0000000..0063d7b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/ReportMapItem.java @@ -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; + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/SdiItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/SdiItem.java new file mode 100644 index 0000000..71c5aae --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/SdiItem.java @@ -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 typeList = new ArrayList(); + + 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 getTypeList() { + return typeList; + } + + public void setTypeList(List typeList) { + this.typeList = typeList; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/TypeItem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/TypeItem.java new file mode 100644 index 0000000..81c133f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/mapping/TypeItem.java @@ -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; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/template/DefaultTemplate.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/template/DefaultTemplate.java new file mode 100644 index 0000000..b369b60 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/model/template/DefaultTemplate.java @@ -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 reportList = new ArrayList(); + + @JsonProperty("LnClassList") + private List lnClassList = new ArrayList(); + + @JsonProperty("PhaseList") + private List phaseList = new ArrayList(); + + @JsonProperty("MultiplierList") + private List multiplierList = new ArrayList(); + + @JsonProperty("UnitList") + private List unitList = new ArrayList(); + + @JsonProperty("TypeList") + private List typeList = new ArrayList(); + + @JsonProperty("DataObjectsList") + private List dataObjectsList = new ArrayList(); + + /** + * 基础校验。 + * + * 返回问题列表;为空表示通过。 + */ + public List verify() { + List problems = new ArrayList(); + 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 extractNames(List list) { + List names = new ArrayList(); + 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 names, List problems) { + Set set = new HashSet(); + for (String name : names) { + if (name == null) { + continue; + } + String key = name.trim(); + if (!set.add(key)) { + problems.add(section + " 中存在重复配置项:" + key); + } + } + } + + private void ensureDuplicateObjectNames(List problems) { + if (dataObjectsList == null) { + return; + } + for (DataObjectCfgItem dataObject : dataObjectsList) { + List names = new ArrayList(); + 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 getReportList() { + return reportList; + } + + public void setReportList(List reportList) { + this.reportList = reportList; + } + + public List getLnClassList() { + return lnClassList; + } + + public void setLnClassList(List lnClassList) { + this.lnClassList = lnClassList; + } + + public List getPhaseList() { + return phaseList; + } + + public void setPhaseList(List phaseList) { + this.phaseList = phaseList; + } + + public List getMultiplierList() { + return multiplierList; + } + + public void setMultiplierList(List multiplierList) { + this.multiplierList = multiplierList; + } + + public List getUnitList() { + return unitList; + } + + public void setUnitList(List unitList) { + this.unitList = unitList; + } + + public List getTypeList() { + return typeList; + } + + public void setTypeList(List typeList) { + this.typeList = typeList; + } + + public List getDataObjectsList() { + return dataObjectsList; + } + + public void setDataObjectsList(List dataObjectsList) { + this.dataObjectsList = dataObjectsList; + } + + /** 统一抽象:凡是有 nameList 的配置项都实现它。 */ + public interface NameListSupport { + List 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 dataSetList = new ArrayList(); + + /** + * 该分组可配置的标签模板列表 + */ + @JsonProperty("LnInstList") + private List lnInstList = new ArrayList(); + + 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 getDataSetList() { + return dataSetList; + } + + public void setDataSetList(List dataSetList) { + this.dataSetList = dataSetList; + } + + public List getLnInstList() { + return lnInstList; + } + + public void setLnInstList(List lnInstList) { + this.lnInstList = lnInstList; + } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class LnClassCfgItem implements NameListSupport { + private String desc; + private List nameList = new ArrayList(); + public String getDesc() { return desc; } + public void setDesc(String desc) { this.desc = desc; } + public List getNameList() { return nameList; } + public void setNameList(List nameList) { this.nameList = nameList; } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class PhaseCfgItem implements NameListSupport { + private String desc; + private List nameList = new ArrayList(); + public String getDesc() { return desc; } + public void setDesc(String desc) { this.desc = desc; } + public List getNameList() { return nameList; } + public void setNameList(List nameList) { this.nameList = nameList; } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class MultiplierCfgItem implements NameListSupport { + private int multiplier; + private List nameList = new ArrayList(); + public int getMultiplier() { return multiplier; } + public void setMultiplier(int multiplier) { this.multiplier = multiplier; } + public List getNameList() { return nameList; } + public void setNameList(List nameList) { this.nameList = nameList; } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class UnitCfgItem implements NameListSupport { + private String desc; + private List nameList = new ArrayList(); + public String getDesc() { return desc; } + public void setDesc(String desc) { this.desc = desc; } + public List getNameList() { return nameList; } + public void setNameList(List nameList) { this.nameList = nameList; } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class TypeCfgItem implements NameListSupport { + private String desc; + private List nameList = new ArrayList(); + public String getDesc() { return desc; } + public void setDesc(String desc) { this.desc = desc; } + public List getNameList() { return nameList; } + public void setNameList(List nameList) { this.nameList = nameList; } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class DataObjectCfgItem { + private String desc; + @JsonProperty("LnInstList") + private List lnInstList = new ArrayList(); + @JsonProperty("ObjectList") + private List objectList = new ArrayList(); + public String getDesc() { return desc; } + public void setDesc(String desc) { this.desc = desc; } + public List getLnInstList() { return lnInstList; } + public void setLnInstList(List lnInstList) { this.lnInstList = lnInstList; } + public List getObjectList() { return objectList; } + public void setObjectList(List 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 nameList = new ArrayList(); + private List queueList = new ArrayList(); + 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 getNameList() { return nameList; } + public void setNameList(List nameList) { this.nameList = nameList; } + public List getQueueList() { return queueList; } + public void setQueueList(List queueList) { this.queueList = queueList; } + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/DefaultTemplateLoader.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/DefaultTemplateLoader.java new file mode 100644 index 0000000..852ea08 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/DefaultTemplateLoader.java @@ -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 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(); + } + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IcdParserService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IcdParserService.java new file mode 100644 index 0000000..729fd63 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IcdParserService.java @@ -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); + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexAnalysisService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexAnalysisService.java new file mode 100644 index 0000000..3365211 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexAnalysisService.java @@ -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 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 collectMatchedReports(IcdDocument icdDocument, DefaultTemplate.ReportCfgItem reportCfg) { + List result = new ArrayList(); + 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 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 unique = new LinkedHashSet(); + for (FcdaNode fcda : dataSetNode.getFcdas()) { + if (fcda == null || fcda.getLnInst() == null) { + continue; + } + String lnInst = fcda.getLnInst().trim(); + if (!lnInst.isEmpty()) { + unique.add(lnInst); + } + } + + List result = new ArrayList(unique); + Collections.sort(result, new Comparator() { + @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); + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexValidationService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexValidationService.java new file mode 100644 index 0000000..eb10544 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/IndexValidationService.java @@ -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 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(); + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/MappingGenerationService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/MappingGenerationService.java new file mode 100644 index 0000000..0451a79 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/domain/service/MappingGenerationService.java @@ -0,0 +1,1015 @@ +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.icd.DataSetNode; +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 com.njcn.gather.icd.mapping.domain.model.icd.IcdDocument; +import com.njcn.gather.icd.mapping.domain.model.icd.LnNode; +import com.njcn.gather.icd.mapping.domain.model.icd.ReportControlNode; +import com.njcn.gather.icd.mapping.domain.model.intermediate.DataSetSelectionState; +import com.njcn.gather.icd.mapping.domain.model.intermediate.ReportAndDataSetState; +import com.njcn.gather.icd.mapping.domain.model.intermediate.ReportBindingState; +import com.njcn.gather.icd.mapping.domain.model.intermediate.ReportGroupState; +import com.njcn.gather.icd.mapping.domain.model.mapping.DataSetGroupItem; +import com.njcn.gather.icd.mapping.domain.model.mapping.DoiItem; +import com.njcn.gather.icd.mapping.domain.model.mapping.InstItem; +import com.njcn.gather.icd.mapping.domain.model.mapping.MappingDocument; +import com.njcn.gather.icd.mapping.domain.model.mapping.ReportMapItem; +import com.njcn.gather.icd.mapping.domain.model.mapping.SdiItem; +import com.njcn.gather.icd.mapping.domain.model.mapping.TypeItem; +import com.njcn.gather.icd.mapping.domain.model.template.DefaultTemplate; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +/** + * 正式映射生成服务。 + * + * 说明: + * 1. 本服务不再使用“单报告 + 单字符串选择”的简化模型; + * 2. 而是按“业务分组 + 多条绑定关系”的结构生成正式 MappingDocument; + * 3. 生成时只使用用户明确提交的绑定项,不强制要求模板里的所有标签都必须配置。 + */ +@Service +public class MappingGenerationService { + + public MappingDocument generate(IcdDocument icdDocument, + DefaultTemplate template, + IndexAnalysis analysis, + List selections, + String version, + String author) { + ReportAndDataSetState state = buildState(icdDocument, template, analysis, selections); + MappingDocument document = new MappingDocument(); + // 原 C# 的 Set_Version() 默认写当天日期,而不是 "1.0" + document.setVersion(resolveVersion(version)); + document.setAuthor(author == null ? "" : author); + // 顶层字段严格按原 C# 输出规则生成。 + document.setIed(icdDocument.getIedName()); + // LD:只输出前缀,不带数字尾号。 + document.setLd(icdDocument.getLdPrefix()); + // 固定值,保持和原 C# mainFrom -> IcdCfg 一致 + document.setWaveTimeFlag("BeiJing"); + document.setDataType("1"); + document.setUnit("1"); + + // 生成 ReportMap + // 1. 先按 DefaultCfg.ReportList 分组 + // 2. reportCount 写组内总数 + // 3. 组内每个报告单独生成一条 ReportMapItem + for (ReportGroupState groupState : state.getReportGroups()) { + if (groupState.getReportItems() == null || groupState.getReportItems().isEmpty()) { + continue; + } + + // 原 C# 的 reportCount:<=1 时写 0,大于 1 才写实际数量 + int reportCount = resolveReportCount(groupState.getReportItems().size()); + + for (IndexCandidateReportItem reportItem : groupState.getReportItems()) { + ReportMapItem item = new ReportMapItem(); + item.setDesc(groupState.getGroupDesc()); + item.setReportCount(reportCount); + + // 单个报告自己的 rptID / name + item.setRptId(resolveSingleRptId(icdDocument, reportItem.getReportName())); + item.setName(reportItem.getReportName()); + + // buffered 按原 C# 转成 BR / RP + item.setBuffered(resolveBufferedCode(icdDocument, reportItem.getReportName())); + + // inst / Select / TrgOps 直接来自当前分组匹配到的 DefaultCfg.ReportList 项 + item.setInst(resolveReportInst(groupState.getReportInst())); + item.setSelect(groupState.getSelect()); + item.setTrgOps(resolveTrgOps(groupState.getTrgOps())); + + // 原 C# 当前固定写 0 + item.setFlickerFlag("0"); + + document.getReportMap().add(item); + } + } + + // 2. 生成 DataSetList + Map dataSetGroupMap = new LinkedHashMap(); + for (DataSetSelectionState selectionState : state.getDataSetSelections()) { + if (selectionState.getLnNodes() == null || selectionState.getLnNodes().isEmpty()) { + continue; + } + + // 一个绑定现在可能命中多个 LN,需要逐个展开 + for (LnNode lnNode : selectionState.getLnNodes()) { + if (lnNode == null) { + continue; + } + + DefaultTemplate.LnClassCfgItem lnClassCfg = findLnClassCfg(template, lnNode.getLnClass()); + if (lnClassCfg == null) { + continue; + } + + String groupKey = lnClassCfg.getDesc() + "__" + lnNode.getLnClass(); + DataSetGroupItem groupItem = dataSetGroupMap.get(groupKey); + if (groupItem == null) { + groupItem = new DataSetGroupItem(); + groupItem.setDesc(lnClassCfg.getDesc()); + groupItem.setLnClass(lnNode.getLnClass()); + dataSetGroupMap.put(groupKey, groupItem); + } + + InstItem instItem = findOrCreateInst(groupItem, selectionState.getLnInst(), selectionState.getLabel()); + + // 关键:把当前正在处理的 lnNode 传进去,而不是只用一个旧的 lnNode + buildDoiItems(instItem, selectionState, lnNode, icdDocument, template); + } + } + + document.getDataSetList().addAll(dataSetGroupMap.values()); + return document; + } + + private ReportAndDataSetState buildState(IcdDocument icdDocument, + DefaultTemplate template, + IndexAnalysis analysis, + List selections) { + ReportAndDataSetState state = new ReportAndDataSetState(); + state.setIedName(icdDocument.getIedName()); + state.setLdInst(icdDocument.getLdInst()); + + if (selections == null) { + return state; + } + + for (IndexSelectionGroupCommand selectionGroup : selections) { + IndexCandidate candidate = findCandidate(analysis, selectionGroup.getGroupKey(), selectionGroup.getGroupDesc()); + if (candidate == null) { + continue; + } + + ReportGroupState groupState = new ReportGroupState(); + groupState.setGroupKey(candidate.getGroupKey()); + groupState.setGroupDesc(candidate.getGroupDesc()); + groupState.setReportCount(candidate.getReportCount()); + + // 关键修正: + // 不再在这里重新查 DefaultCfg.ReportList, + // 直接使用 IndexAnalysisService 已经匹配好的配置项 + groupState.setReportInst(candidate.getReportInst()); + groupState.setSelect(candidate.getSelect()); + groupState.setTrgOps(candidate.getTrgOps()); + + groupState.getReportItems().addAll(candidate.getReports()); + + if (selectionGroup.getBindings() != null) { + for (IndexBindingCommand command : selectionGroup.getBindings()) { + ReportBindingState bindingState = new ReportBindingState(); + bindingState.setGroupKey(candidate.getGroupKey()); + bindingState.setGroupDesc(candidate.getGroupDesc()); + bindingState.setReportName(command.getReportName()); + bindingState.setDataSetName(command.getDataSetName()); + bindingState.setLabel(command.getLabel()); + bindingState.setLnInst(command.getLnInst()); + groupState.getBindings().add(bindingState); + + DataSetSelectionState dataSetSelectionState = new DataSetSelectionState(); + dataSetSelectionState.setGroupKey(candidate.getGroupKey()); + dataSetSelectionState.setGroupDesc(candidate.getGroupDesc()); + dataSetSelectionState.setReportName(command.getReportName()); + dataSetSelectionState.setDataSetName(command.getDataSetName()); + dataSetSelectionState.setLabel(command.getLabel()); + dataSetSelectionState.setLnInst(command.getLnInst()); + // 旧版本只找一个 LN,容易丢掉整组数据。 + // 新版本改成收集所有匹配 LN。 + dataSetSelectionState.getLnNodes().addAll(findMatchedLnNodes(icdDocument, command)); + state.getDataSetSelections().add(dataSetSelectionState); + } + } + + state.getReportGroups().add(groupState); + } + + return state; + } + + /** + * 查找当前绑定命中的所有 LN。 + * + * 旧逻辑只返回一个 LN,会导致: + * - MSQI 整组缺失 + * - MHAI 只生成一半 + * + * 新逻辑: + * 1. 先从当前 DataSet 的 FCDA 中,找出与 lnInst 相同的所有 lnClass; + * 2. 再回到 ICD 逻辑节点列表中,收集这些 lnClass + lnInst 对应的 LN; + * 3. 如果仍然找不到,再退化为按 lnInst 收集全部 LN。 + */ + private List findMatchedLnNodes(IcdDocument icdDocument, IndexBindingCommand command) { + List result = new ArrayList(); + if (icdDocument == null || command == null) { + return result; + } + + Set lnClasses = new LinkedHashSet(); + + // 1. 优先通过当前 DataSet 的 FCDA 找关联 lnClass + DataSetNode dataSetNode = icdDocument.getDataSets().get(command.getDataSetName()); + if (dataSetNode != null && dataSetNode.getFcdas() != null) { + for (FcdaNode fcda : dataSetNode.getFcdas()) { + if (fcda == null) { + continue; + } + if (equalsTrim(fcda.getLnInst(), command.getLnInst()) && fcda.getLnClass() != null) { + lnClasses.add(fcda.getLnClass()); + } + } + } + + // 2. 用 lnClass + lnInst 收集所有 LN + if (!lnClasses.isEmpty()) { + for (LnNode node : icdDocument.getLogicalNodes()) { + if (node == null) { + continue; + } + if (equalsTrim(node.getLnInst(), command.getLnInst()) && lnClasses.contains(node.getLnClass())) { + result.add(node); + } + } + } + + // 3. 如果还没找到,则退化成按 lnInst 收集全部 LN + if (result.isEmpty()) { + for (LnNode node : icdDocument.getLogicalNodes()) { + if (node == null) { + continue; + } + if (equalsTrim(node.getLnInst(), command.getLnInst())) { + result.add(node); + } + } + } + + return result; + } + + private InstItem findOrCreateInst(DataSetGroupItem groupItem, String inst, String desc) { + for (InstItem item : groupItem.getInstList()) { + if (equalsTrim(item.getInst(), inst)) { + if (item.getDesc() == null || item.getDesc().trim().isEmpty()) { + item.setDesc(desc); + } + return item; + } + } + InstItem item = new InstItem(); + item.setInst(inst); + item.setDesc(desc); + groupItem.getInstList().add(item); + return item; + } + + /** + * 构建当前 inst 下的 doiList。 + * + * 关键修正: + * 1. 不再分“先跑一遍 nameList,再跑一遍 queueList”; + * 2. 改成按单个 DOI 逐个判断:if(nameList) else if(queueList); + * 3. 这和 C# 原版一致,避免 queueList 误生成多余项。 + */ + private void buildDoiItems(InstItem instItem, + DataSetSelectionState selectionState, + LnNode lnNode, + IcdDocument icdDocument, + DefaultTemplate template) { + if (lnNode == null) { + return; + } + + List dataObjectCfgItems = + findDataObjectCfgItems(template, selectionState.getLabel()); + if (dataObjectCfgItems.isEmpty()) { + return; + } + + for (DefaultTemplate.DataObjectCfgItem dataObjectCfg : dataObjectCfgItems) { + if (dataObjectCfg.getObjectList() == null) { + continue; + } + + for (DefaultTemplate.ObjectCfgItem objectCfg : dataObjectCfg.getObjectList()) { + List matches = collectMatchedDoiNodes(lnNode, objectCfg); + for (DoiMatch match : matches) { + addDoiItem(instItem, selectionState, lnNode, icdDocument, template, objectCfg, match.getDoiNode(), match.isQueueMode()); + } + } + } + } + + /** + * 新增一个 DOI 映射项。 + * + * queueMode = true 表示当前 DOI 是按 queueList 命中的, + * 对应 C# 里的“基波指标/队列指标”那条分支。 + */ + private void addDoiItem(InstItem instItem, + DataSetSelectionState selectionState, + LnNode lnNode, + IcdDocument icdDocument, + DefaultTemplate template, + DefaultTemplate.ObjectCfgItem objectCfg, + DoiNode doiNode, + boolean queueMode) { + if (doiNode == null) { + return; + } + + int icdCount = resolveIcdCount(icdDocument, selectionState, doiNode); + + // C# 原版 queue 分支有这个关键判断: + // if (doi.tNUM == objectCfgItem.queuecount) break; + // 这会让 “基波有功/无功/视在功率” 这类项不生成。 + if (shouldSkipQueueItem(queueMode, icdCount, objectCfg)) { + return; + } + + if (containsDoi(instItem, lnNode.getLnClass(), selectionState.getLnInst(), doiNode.getName(), objectCfg.getDesc())) { + return; + } + + DoiItem doiItem = new DoiItem(); + doiItem.setName(doiNode.getName()); + doiItem.setDesc(objectCfg.getDesc()); + + // 原样保留 baseflag + doiItem.setBaseflag(objectCfg.getBaseflag()); + + // 只有 queueMode 时,basecount 才按 queuecount 输出 + doiItem.setBasecount(queueMode && objectCfg.getQueuecount() > 0 + ? objectCfg.getQueuecount() + : objectCfg.getBasecount()); + + doiItem.setIcdcout(icdCount); + + int[] range = resolveRange(icdCount, objectCfg, queueMode); + doiItem.setStart(range[0]); + doiItem.setEnd(range[1]); + + doiItem.setUnit(resolveUnit(doiNode, template)); + doiItem.setCoefficient(resolveCoefficient(doiNode, template)); + doiItem.getSdiList().addAll(buildSdiItems(doiNode, template)); + + instItem.getDoiList().add(doiItem); + } + + private boolean shouldSkipQueueItem(boolean queueMode, int icdCount, DefaultTemplate.ObjectCfgItem objectCfg) { + if (!queueMode || objectCfg == null) { + return false; + } + + // queueList 本来就是给 baseflag=2 这类对象准备的 + if (objectCfg.getBaseflag() != 2) { + return false; + } + + // C#:if (doi.tNUM == objectCfgItem.queuecount) break; + return objectCfg.getQueuecount() > 0 && icdCount == objectCfg.getQueuecount(); + } + + /** + * 判断 DOI 是否已经存在。 + * + * 旧逻辑只按 name + desc 去重,过于激进, + * 容易把本应保留的项压掉。 + * + * 新逻辑至少把: + * - lnClass + * - lnInst + * - doiName + * - desc + * 一起考虑。 + * + * 注意: + * 当前 InstItem 已经按 group(lnClass) + inst 组织, + * 所以这里仍然是保守去重,不会过度复杂。 + */ + private boolean containsDoi(InstItem instItem, + String lnClass, + String lnInst, + String doiName, + String desc) { + for (DoiItem item : instItem.getDoiList()) { + boolean sameName = equalsTrim(item.getName(), doiName); + boolean sameDesc = equalsTrim(item.getDesc(), desc); + if (sameName && sameDesc) { + return true; + } + } + return false; + } + + private List findDataObjectCfgItems(DefaultTemplate template, String label) { + List result = new ArrayList(); + if (template == null || template.getDataObjectsList() == null) { + return result; + } + for (DefaultTemplate.DataObjectCfgItem item : template.getDataObjectsList()) { + if (item.getLnInstList() != null && item.getLnInstList().contains(label)) { + result.add(item); + } + } + return result; + } + + /** + * 单个 DOI 的匹配结果。 + * + * queueMode=false:命中 nameList + * queueMode=true :命中 queueList + */ + private static final class DoiMatch { + private final DoiNode doiNode; + private final boolean queueMode; + + private DoiMatch(DoiNode doiNode, boolean queueMode) { + this.doiNode = doiNode; + this.queueMode = queueMode; + } + + public DoiNode getDoiNode() { + return doiNode; + } + + public boolean isQueueMode() { + return queueMode; + } + } + + /** + * 按 objectCfg 级别实现 “nameList 优先,找不到才退回 queueList”。 + * + * 关键点: + * 1. 先扫描整个 lnNode,收集所有命中 nameList 的 DOI; + * 2. 只要 nameList 命中了任意一个,就直接返回这些 nameList 命中项; + * 3. 只有当 nameList 一个都没命中时,才允许 queueList 命中。 + * + * 这样像: + * - nameList = [HFundPhV, FundPhV] + * - queueList = [HPhV] + * + * 当 ICD 里已经存在 HFundPhV / FundPhV 时, + * 就不会再让 HPhV 派生出“相电压基波有效值”。 + */ + private List collectMatchedDoiNodes(LnNode lnNode, DefaultTemplate.ObjectCfgItem objectCfg) { + List nameMatches = new ArrayList(); + List queueMatches = new ArrayList(); + + if (lnNode == null || lnNode.getDoiList() == null || objectCfg == null) { + return nameMatches; + } + + for (DoiNode doiNode : lnNode.getDoiList()) { + if (doiNode == null || doiNode.getName() == null) { + continue; + } + + String doiName = doiNode.getName(); + + if (objectCfg.getNameList() != null && objectCfg.getNameList().contains(doiName)) { + nameMatches.add(new DoiMatch(doiNode, false)); + continue; + } + + if (objectCfg.getQueueList() != null && objectCfg.getQueueList().contains(doiName)) { + queueMatches.add(new DoiMatch(doiNode, true)); + } + } + + // 只要 nameList 命中了任何 DOI,就彻底禁止 queueList 再参与 + if (!nameMatches.isEmpty()) { + return nameMatches; + } + + return queueMatches; + } + + /** + * 解析当前 DOI 在 ICD 中真实存在的序列数量。 + * + * 规则贴近 C#: + * 1. 优先使用 SclGeneratedModelReader 已经按模板 count 回填好的 doi.sequenceCount; + * 2. 再用当前 DataSet 的 FCDA / ix 做兜底; + * 3. 这样 icdcout 才能和原版保持一致。 + */ + private int resolveIcdCount(IcdDocument icdDocument, DataSetSelectionState selectionState, DoiNode doiNode) { + int max = doiNode == null ? 0 : doiNode.getSequenceCount(); + + if (doiNode != null && doiNode.getIx() != null && doiNode.getIx() > max) { + max = doiNode.getIx().intValue(); + } + + if (icdDocument == null || icdDocument.getDataSets() == null || selectionState == null || doiNode == null) { + return max; + } + + DataSetNode dataSetNode = icdDocument.getDataSets().get(selectionState.getDataSetName()); + if (dataSetNode == null || dataSetNode.getFcdas() == null) { + return max; + } + + for (FcdaNode fcda : dataSetNode.getFcdas()) { + if (fcda == null) { + continue; + } + + boolean sameLnClass = equalsTrim(fcda.getLnClass(), doiNode.getLnClass()); + boolean sameLnInst = equalsTrim(fcda.getLnInst(), selectionState.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; + } + + /** + * 计算 DOI 的 start / end。 + * + * 严格按 C# 规则: + * + * 普通序列项: + * - start 默认 0 + * - 如果 basecount < icdCount 且 basecount != 0,则 start = 1 + * - 如果 icdCount > 0,则 end = icdCount - 1 + * + * queueList 命中的基波项: + * - start = 0 + * - end = 0 + * + * 注意: + * 这里不是 1 基区间,也不是 end = icdCount。 + */ + private int[] resolveRange(int icdCount, DefaultTemplate.ObjectCfgItem objectCfg, boolean queueMode) { + // queueList 命中的基波项,C# 原版就是固定 0~0 + if (queueMode) { + return new int[]{0, 0}; + } + + int start = 0; + int end = 0; + + if (objectCfg != null) { + if (objectCfg.getBasecount() != 0 && objectCfg.getBasecount() < icdCount) { + start = 1; + } + } + + if (icdCount > 0) { + end = icdCount - 1; + } + + return new int[]{start, end}; + } + + /** + * 解析 DOI 的单位。 + * + * 修正说明: + * 1. 不再扫描整棵 DOI 子树的所有叶子值; + * 2. 只读取 DAI -> Val 的配置值; + * 3. 找不到匹配单位时,默认返回 "other"; + * 4. 这样更接近原 C# 的 ReadtUnNaming 逻辑。 + */ + private String resolveUnit(DoiNode doiNode, DefaultTemplate template) { + List daiValues = new ArrayList(); + collectDaiValues(doiNode.getChildren(), daiValues); + + for (String value : daiValues) { + DefaultTemplate.UnitCfgItem unitCfg = findUnitCfg(template, value); + if (unitCfg != null && unitCfg.getDesc() != null && !unitCfg.getDesc().trim().isEmpty()) { + return unitCfg.getDesc().trim(); + } + } + + // 原映射里找不到单位时,统一归为 other + return "other"; + } + + /** + * 递归收集 DOI 子树中所有 DAI 节点上的 Val。 + * + * 这里只读取 DAI 的 values,不把 SDI 名称、其他叶子值混进来。 + */ + private void collectDaiValues(List nodes, List result) { + if (nodes == null) { + return; + } + + for (DoiElementNode node : nodes) { + if (node == null) { + continue; + } + + if ("DAI".equalsIgnoreCase(node.getKind()) && node.getValues() != null) { + for (String value : node.getValues()) { + if (value != null && !value.trim().isEmpty()) { + result.add(value.trim()); + } + } + } + + collectDaiValues(node.getChildren(), result); + } + } + + private float resolveCoefficient(DoiNode doiNode, DefaultTemplate template) { + Set values = collectAllLeafValues(doiNode.getChildren()); + for (String value : values) { + DefaultTemplate.MultiplierCfgItem multiplierCfg = findMultiplierCfg(template, value); + if (multiplierCfg != null) { + return multiplierCfg.getMultiplier(); + } + } + return 1.0f; + } + + /** + * 构建当前 DOI 下的 sdiList。 + * + * 修正说明: + * 1. 原 C# 中,如果命中了类型节点(如 mag/ang),但前面没有命中相别节点, + * 会自动创建一个“无相别”的 sdiItem: + * - name = null + * - desc = 无相别 + * 2. 当前 Java 版之前没有这层兜底,导致无相别内容直接变成空数组。 + * 3. 这里改成按“相别节点 / 类型节点”双层递归处理,尽量贴近原 C# 的 ReadtUnNaming 逻辑。 + */ + private List buildSdiItems(DoiNode doiNode, DefaultTemplate template) { + List result = new ArrayList(); + if (doiNode == null || doiNode.getChildren() == null) { + return result; + } + + for (DoiElementNode child : doiNode.getChildren()) { + // currentSdi 表示当前递归上下文中已命中的相别节点 + collectSdiItems(result, child, template, null); + } + + return result; + } + + /** + * 递归收集 DOI 下的相别 / 类型信息。 + * + * @param result 当前 DOI 的 sdiList 结果集 + * @param node 当前递归节点 + * @param template DefaultCfg 模板 + * @param currentSdi 当前已经命中的相别节点;如果为 null,说明当前路径还没有相别 + * + * 逻辑说明: + * 1. 如果当前 SDI 命中 PhaseList,则创建一个新的相别 sdiItem; + * 2. 如果当前 SDI 命中 TypeList: + * - 如果已经有 currentSdi,则把类型挂到这个相别下; + * - 如果没有 currentSdi,则自动创建“无相别” sdiItem,再挂类型; + * 3. 只有 type 节点才会创建 typeItem,且只保留 mag/ang。 + */ + private void collectSdiItems(List result, + DoiElementNode node, + DefaultTemplate template, + SdiItem currentSdi) { + if (node == null) { + return; + } + + if ("SDI".equalsIgnoreCase(node.getKind())) { + // 1. 命中相别节点:例如 phsA / phsB / phsC / phsAB ... + if (isPhaseNode(template, node.getName())) { + SdiItem phaseItem = new SdiItem(); + phaseItem.setName(node.getName()); + phaseItem.setDesc(resolvePhaseDesc(template, node.getName())); + result.add(phaseItem); + + if (node.getChildren() != null) { + for (DoiElementNode child : node.getChildren()) { + collectSdiItems(result, child, template, phaseItem); + } + } + return; + } + + // 2. 命中类型节点:例如 mag / ang + if (isTypeNode(template, node.getName())) { + // 如果当前没有相别上下文,就按原 C# 规则自动创建“无相别” + SdiItem target = currentSdi; + if (target == null) { + target = findOrCreateNoPhaseSdiItem(result); + } + + addTypeIfAbsent(target, node.getName(), template); + + if (node.getChildren() != null) { + for (DoiElementNode child : node.getChildren()) { + collectSdiItems(result, child, template, target); + } + } + return; + } + } + + // 3. 其他节点继续往下递归,继承当前上下文 + if (node.getChildren() != null) { + for (DoiElementNode child : node.getChildren()) { + collectSdiItems(result, child, template, currentSdi); + } + } + } + + /** + * 查找或创建“无相别” sdiItem。 + * + * 原 C# 的行为: + * 当命中了类型节点,但前面没有任何相别节点时, + * 会自动创建: + * - name = null + * - desc = 无相别 + * + * 这样像 Hz / TotW / TotPF 这类无相别 DOI,仍然能挂 mag$f / ang$f。 + */ + private SdiItem findOrCreateNoPhaseSdiItem(List result) { + for (SdiItem item : result) { + if (item.getName() == null && "无相别".equals(item.getDesc())) { + return item; + } + } + + SdiItem noPhaseItem = new SdiItem(); + noPhaseItem.setName(null); + noPhaseItem.setDesc("无相别"); + result.add(noPhaseItem); + return noPhaseItem; + } + + /** + * 向当前 sdiItem 下添加类型项。 + * + * 规则: + * 1. 只保留 mag / ang; + * 2. 输出格式固定为 mag$f / ang$f; + * 3. 避免重复加入同名类型。 + */ + private void addTypeIfAbsent(SdiItem sdiItem, String typeName, DefaultTemplate template) { + if (sdiItem == null || typeName == null) { + return; + } + + // 只保留原映射里真正需要的类型 + if (!"mag".equalsIgnoreCase(typeName) && !"ang".equalsIgnoreCase(typeName)) { + return; + } + + String finalName = typeName + "$f"; + + for (TypeItem item : sdiItem.getTypeList()) { + if (finalName.equals(item.getName())) { + return; + } + } + + TypeItem typeItem = new TypeItem(); + typeItem.setName(finalName); + typeItem.setDesc(resolveTypeDesc(template, typeName)); + sdiItem.getTypeList().add(typeItem); + } + + /** + * 判断当前 SDI 是否属于“相别类”节点。 + * + * 例如: + * phsA / phsB / phsC / phsAB / phsBC / phsCA + */ + private boolean isPhaseNode(DefaultTemplate template, String name) { + if (template == null || template.getPhaseList() == null || name == null) { + return false; + } + + for (DefaultTemplate.PhaseCfgItem item : template.getPhaseList()) { + if (item.getNameList() != null && item.getNameList().contains(name)) { + return true; + } + } + + return false; + } + + /** + * 判断当前 SDI 是否属于“类型类”节点。 + * + * 当前只关心 mag / ang。 + */ + private boolean isTypeNode(DefaultTemplate template, String name) { + if (template == null || template.getTypeList() == null || name == null) { + return false; + } + + for (DefaultTemplate.TypeCfgItem item : template.getTypeList()) { + if (item.getNameList() != null && item.getNameList().contains(name)) { + return true; + } + } + + return false; + } + + private DefaultTemplate.LnClassCfgItem findLnClassCfg(DefaultTemplate template, String lnClass) { + if (template == null || template.getLnClassList() == null) { + return null; + } + for (DefaultTemplate.LnClassCfgItem item : template.getLnClassList()) { + if (item.getNameList() != null && item.getNameList().contains(lnClass)) { + return item; + } + } + return null; + } + + + private IndexCandidate findCandidate(IndexAnalysis analysis, String groupKey, String groupDesc) { + if (analysis == null || analysis.getCandidates() == null) { + return null; + } + for (IndexCandidate candidate : analysis.getCandidates()) { + if (equalsTrim(candidate.getGroupKey(), groupKey) || equalsTrim(candidate.getGroupDesc(), groupDesc)) { + return candidate; + } + } + return null; + } + + private Set collectAllLeafValues(List nodes) { + Set result = new LinkedHashSet(); + if (nodes == null) { + return result; + } + for (DoiElementNode node : nodes) { + if (node.getValues() != null) { + for (String value : node.getValues()) { + if (value != null && !value.trim().isEmpty()) { + result.add(value.trim()); + } + } + } + result.addAll(collectAllLeafValues(node.getChildren())); + } + return result; + } + + private DefaultTemplate.UnitCfgItem findUnitCfg(DefaultTemplate template, String value) { + if (template == null || template.getUnitList() == null) { + return null; + } + for (DefaultTemplate.UnitCfgItem item : template.getUnitList()) { + if (item.getNameList() != null && item.getNameList().contains(value)) { + return item; + } + } + return null; + } + + private DefaultTemplate.MultiplierCfgItem findMultiplierCfg(DefaultTemplate template, String value) { + if (template == null || template.getMultiplierList() == null) { + return null; + } + for (DefaultTemplate.MultiplierCfgItem item : template.getMultiplierList()) { + if (item.getNameList() != null && item.getNameList().contains(value)) { + return item; + } + } + return null; + } + + private String resolvePhaseDesc(DefaultTemplate template, String value) { + if (template == null || template.getPhaseList() == null) { + return value; + } + for (DefaultTemplate.PhaseCfgItem item : template.getPhaseList()) { + if (item.getNameList() != null && item.getNameList().contains(value)) { + return item.getDesc(); + } + } + return value; + } + + private String resolveTypeDesc(DefaultTemplate template, String value) { + if (template == null || template.getTypeList() == null) { + return value; + } + for (DefaultTemplate.TypeCfgItem item : template.getTypeList()) { + if (item.getNameList() != null && item.getNameList().contains(value)) { + return item.getDesc(); + } + } + return value; + } + + + 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()); + } + /** + * 解析单个报告的 rptID。 + * + * 原 C# 是直接取 tReportControl.rptID, + * 所以这里优先从 ICD 解析后的报告控制块对象里读。 + */ + private String resolveSingleRptId(IcdDocument icdDocument, String reportName) { + if (icdDocument == null || icdDocument.getReportControls() == null || reportName == null) { + return null; + } + + for (ReportControlNode reportControl : icdDocument.getReportControls()) { + if (reportName.equals(reportControl.getName())) { + return reportControl.getRptId(); + } + } + return null; + } + + /** + * 将布尔 buffered 转成原 C# 风格的 BR / RP。 + * + * 原 C#: + * - true -> BR + * - false -> RP + * - 默认 -> RP + */ + private String resolveBufferedCode(IcdDocument icdDocument, String reportName) { + if (icdDocument == null || icdDocument.getReportControls() == null || reportName == null) { + return "RP"; + } + + for (ReportControlNode reportControl : icdDocument.getReportControls()) { + if (reportName.equals(reportControl.getName())) { + Boolean buffered = reportControl.getBuffered(); + if (Boolean.TRUE.equals(buffered)) { + return "BR"; + } + return "RP"; + } + } + return "RP"; + } + + /** + * inst 按原 C# 规则,只允许 01~04,其余默认 01。 + */ + private String resolveReportInst(String inst) { + if ("01".equals(inst) || "02".equals(inst) || "03".equals(inst) || "04".equals(inst)) { + return inst; + } + return "01"; + } + + /** + * TrgOps 按原 C# 规则,只接受 40 / 96,其余默认 96。 + */ + private String resolveTrgOps(String trgOps) { + if ("40".equals(trgOps) || "96".equals(trgOps)) { + return trgOps; + } + return "96"; + } + + private String resolveVersion(String version) { + if (version != null && !version.trim().isEmpty()) { + return version.trim(); + } + return LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); + } + + private int resolveReportCount(int size) { + return size <= 1 ? 0 : size; + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/enums/GenerateStatus.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/enums/GenerateStatus.java new file mode 100644 index 0000000..8138b64 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/enums/GenerateStatus.java @@ -0,0 +1,13 @@ +package com.njcn.gather.icd.mapping.enums; + +/** + * 接口生成状态。 + */ +public enum GenerateStatus { + /** 生成成功。 */ + SUCCESS, + /** 需要前端重新选择索引。 */ + NEED_INDEX_SELECTION, + /** 生成失败。 */ + FAILED +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclGeneratedModelReader.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclGeneratedModelReader.java new file mode 100644 index 0000000..0bb5b08 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclGeneratedModelReader.java @@ -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 allFcdas = new ArrayList(); + 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 + * - TLN0.getLnClass() 返回 List + */ + 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 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 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 buildTemplateSequenceCountMap(SCL scl) { + Map result = new LinkedHashMap(); + 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 doTypeCountMap = new LinkedHashMap(); + 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, + * 所以这里要做一次安全转换。 + */ + 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()); + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclParserAdapter.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclParserAdapter.java new file mode 100644 index 0000000..5ba1801 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclParserAdapter.java @@ -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"); + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclTraversalSupport.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclTraversalSupport.java new file mode 100644 index 0000000..856d1be --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/SclTraversalSupport.java @@ -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 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 flattenLeafDai(DoiNode doi) { + List result = new ArrayList(); + 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 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); + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated-com.example.scl.generated.zip b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated-com.example.scl.generated.zip new file mode 100644 index 0000000000000000000000000000000000000000..9baf77873fa0531699a5ae08c254704be047ee0e GIT binary patch literal 283215 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
    j!C+G%6Qy~PqbUvceW`7YIQm7 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 >W=b0YpCF?>&{#|DZ7b!he0xd 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

    p85}!VOwlNLt8U-6p|Wur4va zE@9LOTt>Gn&Y=C3nI~gfJOjHuznE8Los~aUl`e7Jh-+lN?@}?17R8#E3GW7`r;g_Bpmaqht zwn^0UkM*SIq*%VUt-TS=hvP!q!wbF#6))o-liHm3RcUf&Z^2iK|9EVKd>&Rd#V2K!*YA3`RMn_v@#X(mLGK@8?y6Z5m1H z%hBDjHg&YTrqy^Rq_0g(WojG{=>%0b5!Pcd=rzPJ$#=IW(jp(O9v?R6C{66;9uw;A zxo+zPx4I9qBzM~j*WGGfd2f_V?!)cWz|S_9IJVb`2T%TU;9I>p`6db^=meRA#qyx2(_VEo_!fGF@uj7d)rDDyuW5 zE=IT;ooyl34itv)RQnSTmIf71>w8Yb&Xc;nE?I@qo&w)>1Q`g5^E;iwKk0Q@MsWXMB9kM1nRO% z`*xxVfe-;um0i&BeXi#3g1?%)&xZPIFuqjm(pU5?3ao7?MzD6)?WeA)xg=q%B~-l* zU7bCto!TbV)i)h14;HpHZ?Q#IA}y1gdpjkV?z~#(AWF{@P#y~=&VA2@!iV6U0f5041h_>BlWYnsQ|2ElU}7$~E z2T>cUdwBaw_??c9K6HCpy4s;`d-^XW#SSb;WfqWL_V`D78SigXTZoyRk�}Uf#yu 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 z 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%0AV$s0M}ZPr8Tt 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%0DWuRZSgjEdj8(|MWyn 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 literal 0 HcmV?d00001 diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated-package-replaced.zip b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated-package-replaced.zip new file mode 100644 index 0000000000000000000000000000000000000000..39be83974e632d31a2d846f25b312130e22cde5b GIT binary patch literal 307305 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�I_7>uvv(g{ z=lSP_hr2tgH0+e+>9ySFs|L#J;^1IYcl)oFYrT51p>6(lc{PgUEr?j0z-myu zWz-^azSy5YJB1sm#goHYA#J_N(e(!zho1J0d98FP^x0f&K0OT44q1|1j0_@~xG&i{ zC{nFQ_B@t&gS*V2`Ms31<~X~wu!LtBN^p5S+L~k0**481DCcte2g~gh7yVW!b^7EF zpA)?7rIwQiQT~;pkZlc!Q>@Sc-eKuTOGEki%GgsF>C2(+{wCZi+h!OHjTQA_P%Hv- z?IJHy>trW$ZJU7#WQeP+Z)rDF?MB)J2=<0lmtoJf8nLHYK@25L=-c+CW^sD z#`ZF^&XRK$MisSxx`=|U@r~)i5&|Ja3N>Mqpz{J*3|TOFnNpS!n6t)pgb)XXG2H3W zdD>4SWjVb^O6kSq9(jX5U8`zId+%$e*O=0__n4WP={cvyX+Sw>oo6t&TbC{3j4bjM z$SQ|aiYxKmhNVkILAs@i79^T(8EyrVn$aJWze--wDy0Sr7k)?c(z;DE8c7{hTd+7u zt^RGx=>JTtXlWR)J9a>fG8Ohm!&QIvgxCAyDE_kUDm=6Kg$1+j{3a**aMe zb%&-aWVIj7>s07^tqcvhkoyrfq{Lz@+>R!o46Y}A@K(Qf6OOM*I39`bmMhv7b*HI$ z@-u$6xQB98f$eTrVCx6`VyvwZ1jigZyD#zrT6Sp{$h2>8nEgf*H2Z_?h1|)V3Aqp4 znRNkH0FZp5#S6rsixE0f%4qE^fpY9XwB)|0kM=yAOHJshHw-Dny)6VAz=KsK1iH)5 zQ-~6tdyr`1f<(S$ZcxjCU;on)O-|K_jNeJCF-W*ZpG=qc`~*U2exJSfOWq_NDbVnRs3}WlTT@Ff zfN}EoJ9Se6A0_6z35Fr{+Rz0f&(Rzp>Ac8tJ@Ra=KV{OpXn4e;j}oP8lmBy|!q4_G7g)NdDy(8OonNWq9_N#@Aw zC>TzoWvW{r;^X;cY^rG=0s`^0oQA`eFZ(H0ZAC?8a86c7qjtt?A?bZ#{TNzzn2LtJ zLXTfxZY6+rgy$JtEd^&`ZoL~QHkzKmdkz-%LXUoiLE|zM!MOoJO!j!kDW2^D3SAxf ze)w{7HI+AnSxI4`1bkfdkA4-K=*0yO`B0_Bn}a2+p%?_1SpG&bdaOtBP0G|tk$l3M zD#s*ENjp2rK4Ld=Lefh=YI$dDN-j&RX`zvU$ys^mz2viG*A^^KX%-zkwZeASBu?lK zP3ci6OCXwkYBaohKTUXiRXHAfVCW2tVcwr~Iax>=1>N4HYg|vD2bj14Y8SAQL{S&* z`qr=|`o{90OS0VR@6Z`&VevR28oM#q#vo~y+i_2%jLCdfNyyw;i%D$4NIGV1>zrNJr1yH@}9T^8=5rAfy=Z_4wP z{|Te*vpyHMkxg)wL3MU3&#%F0BeWxFnZesiUNg!&3@(V|;5rJS0jdT$mOuUd71`6{ z+hmy2os|jQ(A1v*nfpJ8p)B)Ev}0s9hs(Rf_LR_xPsP@VEWgb|M~Rv5L_H5L8U*X_Ts z+ZMaLe&tCp#fP;;eW#k52~eGBAAiH};n|%$k}g%X=A-YKOlZ|9*K#{+kKAA*#9_jI ze5qeynbv+;mBFu=OWr0MgUZX2D#PQkSM@v1*az#-n5SW~pbOGTvj4qR{qn{OLaaTx zsB&#THVl92ELCik7*_Ys*-V6Y{y+@ibbJU{A^&Z$C18F0w}P1#&$n3)6wGfd?FFPNF!_^)8*``)!}PVTQee|}4QfpE} z&mB1aJ^iOI{&Pp?^Rq5?f#7{hBY2jRGp)2LwU z#Gv*v-Ct^W-F~;=l!^mGfMO1s9&P?HCHEiOnMf=w9B|pLf|cLK;$aqG%V-7Sj_=T z5;&Nr(S6@cb8>PrvjF6J22G)(c_uA1QflMdpze_4IVnZDMf>cW+;{h<*NvZNQ&Vs~ zpJiXBMN0nbo_FQ-k33HhE#IOeGXIuRihJGp;q0M!R)V>n#M7J^JostWy&a9H%7h>Ou{#z`QIR<~v zTr++C_gLoczr`{&5N4O))6(KK>lrEZGd@Xy2kVvB+GD6|e#z=@!G@sIm=jMs9cEQy zXDhX2+R@BgYJ`_z&~D?ZB_u-P(OE>VeL@76*wKTj?ZgW#Dvim1#WFO@38B-=SgJtW z_qBbxDb+-bwQZ-h$_BQ0fw&9~&Uk<~gh0_ql9s5THoIODjSoZ1i=0%qr$@ZvytQm1 z%!^{uXL%Oj4VWlxFRiI!*6+(#-R&>#4~nBWmavo64npx4as7O!?XC=+vQCWlxr}on^eWL z+p1hiMdliVKvXq3_l`Zb0UQ$^Hp~kq#IGa609dLbrM~LZ3 zIvZ`Zj>fbJgv9Rq5>hp4>M=o@1UiQt!4|AImMCL#8THr+H4VXqeE9^KS>A(o<}4jS zs;EZb7NK>bUezKj{>`R{yj4BlqOAXQind98AUyc7*8UpH$H#DKA52o0Mv)yR%_2(! zb*ZBkGlj&veW#Zgi41e)^@#mKQWgfIcto?M=@$8Sbk{#wIJJjjKLY>*kq9sl|80wj zl)a;y>wjw^Ua56h-2(pHJYl{80shIiZ-4tpRoj#QE2efByZ&!6bqisLs;FY+aOz8E zx6TI4N$2?`eoJUVAv=_qoDMYr6uVfiL{0P;D3%Jfl2`W9#S<_Na}i{Pai*8894wBr zGaby`+2}H7S#Jz@pIeu?M;JbSJbPzDIHuDt%;U;-c*n|=%FLK4{)LIn4%OLYZc__= z*cuDf!8*-*U);n26f=ThX*%S?m{egJnd!Mts4BD3lS=}5lD0~M`XPM2;ADy?Zw@fOb=KGOjp%yfML#vvf5F5B>r z5u(rTlxoOOhVQ2vjf>kFjf?dI4M+AQ{OPp?%* zgaG4^`mb>aEFCGL7l^H9&Xg`~9z%nx?_mo7xn_F;jGOarRyJucT%YiJ8*g&+)!D@{ zYQ&2Two+uRbPb9e6mGdtO4eK#(%>yVV98d=OPP<|NMgNbWpD@-D2%XPWt0}QBgw)@ zzcZ?#keh!x3#kZS?{ZS2RX#oPjP$s{_rS?)>loZ`_`k-lbX-zwjUaU5^q9C9e#}+7 zyZ|f7|KPjv$a5#)yJ(50|JGiOSzVj$%zIY@3>v+xMT91n+M%zuR)C$Ok<&mI>GcC8 z%y@awF7UT-CbX!Ql3lFcmL)5s1^1lI`VNPHv!&*7qmJNaG@9K4iyxcRZb!jH7 z>;sQ5icdq268tHKOYTT=>d!jn+*SZuRpL~qbUL@7jt>XM^WS)O~E z{XLVW40SKiPsj<({>Y+0p|QqHvE8@LGA>h!6z>%~Zl8eN92^KS6Gn*<#anKxkq`Y& zrOF_TIps;fh0FE`J3s*o0oNXG_SY+E=^G?$&`c(c7RhRS2FHtiw~Aq~*$9zx7Oh6O z7(@k5m}e(7qgrc}1or^@JF`b*XVS1<5g@iuF+8P4G9gLUKA3PI0K(obSfdRe7iYGC z&vveaUmF&QdvFttnH4YwwVLr!tjRf_68eCj&(?uEe?`b9_Tk>_lsBg!a}UQeR=zL3 zU;ZvMWUd3N@(VlT|HZB4F&o8JaW;dL3d{!kU{nvjE2cvL1kws>oL#zwXmUc>e+<`i zQ_)~)xPTReX(gH=6fpUc8Od&Vzhg87@jb#1B;<36t}ZUVY4n>~vtsrrV{0KdG!{s; zY{sT`Q2B}BqjQh;V)dRXtovDe^=o4>zJ8#qs7t{&zzhW0w@d+c5;Xg6GCcY_1M|E3 zOq$V(A-8UVrz|mE&bH}3+&=~;mbIeN$bh+Y3n&u)+k7n0}4_ks7P(K*pksFFRwh8A1-lhH9ZOoz5b8$JNgViem(hb)Y;5YvH1xw@Q3eR zL%kn_1=OiJex^)EWJAUYq=@QFK5vVilX*l|G%QaJS`djCyLsHrC~`96q!c;P{p>G0 zCisRcv!)ylMQvQp{!%Na$qKW=&|is*Zu^`r9(GBmWWB~+A&%3Q9lf28*X(T5hS?~` z`6*_YtL~EK>fbWgioJJKqIA$FOoIKsh`2x>^S8i0?j60X{@&6qdgAY1!6y;=0Q&c%hckE7d7bI4nYT|J45Ki38T(k*) z$?Q+UaGYcVahWWvR)wl?31@?*dbC*4Kvu@R7N5kOCt9`#nPo9mrgXRs95Qnusf)~} zXg;9|%bi{zb5bPe$r7wsWZXlJyWPuqT_G}K?Nn*0#-GJlsZ_ypV7Lte@KW;q7BRVP znA7ipPeIHA0&H3Y#pM81vvuLL5I2dUJ9@(75m$f+C0cln|=f`qj#R6K_YANPy22X^Y$M z?gP@ES;k58w0HDK+i?it98n5-qwELak}2iilVW?i!eo|tPguoVN<7-lzK0Hw)A&8N zdA8w4-r+Ov%>qMbH_P%%!;12c*-+wxD?`-+5SD2NvrR(1(hN|l`SQtLW`I_8E_U(~ zxz42!j8~OCq+Vl)0+lvMa06Zc8ju*^5$_U=jmuZnFSpKGx$n$Q_))8r3FK+3jMYh; zlksW>bA?!r(^W7cAiJf~UUA%%#SE(OxZKM)mKEzqF3HSRt!fPwJv@+Wc1Az6M}9U< zGgIGnl~YPQ-K!`ySQi<$nb51%clPslMG0A@S5W5CD=WQsLHy%DQnRqT>;s^)p>X~K zT25I}Gj}T!vwuC5FaU*Si5DKIFC%Ai=#Zq3-iuwwv10tz&nW0yc@vXj|Qx=xaiOVippGPwM+1zK zRsYwvZU8m=)$1d@W_XyLI~>F5iZ{zWmiTCJH&13Z=%7&Mr16xrSqE{K2-`7yz3+r2lyNxka7TTYj1pDqA_~l^Of{ z)ht0ILOuW2=@HvmuNc|a+I~b{7B8xq@JO;GborKlL(iv)@4c3Zg^R;^+3SwSnSx)< zltrWdqOfa0G!>!%wD?-EEJ|Pe=!kOgT}~!tWgwJ zk?PnE%fC?GwQD@Ar_iBFW0DRe9=JLymri2TdhBFvwNM+K-k5TG3*YGg`>k{Nm5|eC2{B>(Le}nCexhk5GNc!Xc?-z zS%D~u_$-Ev#MVgCPF7Y@MT4_3g?{@l=?2A*iLTzNJ&ehEM;Mn}y1)=+#FMBz;@wXX zb_wVS3^HWjlI->zh1S|#rTqnBl*>bC?!)%lX_N0RejTilGwr3V_gxw_q@=55LRxgh zr6v_995$kNBQpaH-2*rC9v!5YDS%r?zmyj8?X~9Cl%mM-}3lyeC z2^_B}(a1>OYnv?+=9#7!ou6t#zAS9O#d9$60Uk*e{^_|UsJJ1$wLB0Oh9%6o8#R>D z*QnoaR_pamU33BMXGL%y(itW803-A~xV<63Zxo6k9Zd#a3j`C`ap3e_`BIh9gu;2P zT`E78D0bNeCtVjbj`%84MUtyJHy4=jXqFt@h(3(gRL{+2TJ`Na&M7lH8&)~H94b7r zvhmVQ^p)>~nym?$Pa%j~5k{}3wS0cRAzvrvNC}n|ucT@-QN#@5dgo)IyAMiIUCT#) z_Y+Ud4}tqFD4$4Pp?&X$>L3WX%tlX}EPk(gcBL7=jEJ^OH>G!K_E=(CB#Z ztC=)_?TKK>5P4}ii^#0CC>g>~jEwyQluO7H_lHQP5rWa1fj;Tb(!r1+!w96SA~XN2 zsU+`SLh0oJ!wjAOx*{g2xz>b$b7Bmre=7?M)5-%+0rNu9&t zvY`GIQYk?EwdL4eXS@?xD@AQiX|qip(as3Rp(=7~=n3vP_Rv|JNyb`l0ZtF;g{1DU z<%nXp-_J1zN~f5~gT`dN%U&K0)e-rvQWRFm+=XxPtrcrKe`sGcC|6CRt^WEkqGl*O z!0!&~yRdIko}z#+c6<7=XiS+$k4LilARHBGz?{tQ{!pxRTaOY&5wCkMa;*|=SS!^U zmuTx%f{#46E&H*W7>kKRuxBp9Er#9w3G$D>p|c7~_22+#ZU~@mF8%L5H@v0Sb&=O|&mMmrpu=3@?Y1|U&qc3pJG$Z>Rz{W^xUg-uFeWOpU@Pb z5P%oXC?H1XH}!5>JT^=+ARWV0-OOG?NVOSmNQ!+$5W z;MCDWs}T%CN93ll4WXw_pD4zqKwmk`D0~>RJcME!xpTG0r5XU>$wb_p$b%|KOVi^b z3X%TQMLCz7QXE3ms(L)BIF~Wp3hux*fzwA06T%fN7YeCX&*==s6jTwa_L<@UH|{5d z><8X($pp?@BKAL`lys%SKH1i$&)O#}$yxV;o{h}3FWyOh`;D5ozE@5OQ8NKiw5=TN zRGYhkjD4I^Yvvp_&B3!|FHH~0Qdz*?xM|(&UW9o&LaJA=G^j>>dyZOs+6?OSTPtCa zP|aJke5x-aQ&MAz-?>uSszXjGi21;o0iygj zZoaK87}Fjr8*a87QK-#=QPP3ZR^^DmXi8`m{Y1(WGEhe&tRC{8ViwQ(NizG3R!U2a zZtDQ3{;`?G4?R5s+*vosJOMcMbdH^FSU=74+Ufx>W`$$=-X@F1jQlW5PgLqS2o3s_ zUDQT7a}6RNzt`~!+!vf34~@J(xe{AE42FKHI16{PdS1BSee2$KJAikzeVUiNdVG68 zP(ZEmYfxF(h;;dD&o$-{O0-iWwTr5mASkqt;*TXBCl7ZjWlv3!Q$W7<8ZVC=f|oG1 zVwY-~uY-23!Djp(IIh3}e&m3jC-O0P5@>rmFa!s??rTsQhn61ilb*KrKd+Hrt{*cc z3~1_@+}id#Uv9YK_eB)Vyrrzrd#Hya!wQEZBm7}97>37pInV&K{->_7E{Pg+n99mU zRalK$WVw=pNm#{F`+6LQ6lGq zZ7Y>n3vOXlo3Tt#a8Atau8Serj|q^-mqE;d-#dmd+?k9+8i%^5c$qGk{jKpyz34}fPo>x-9be0i3;KSAHkn>O@ z0n~U4WDLcP6@1wO*~SQ$7ws%13+;+>k!FjEpi70E*X-lyEWHVC;qCLZh5JQ8>`uau ztGm5Hn@-A%&Dk8t)#ZK8JlsA{wk;57mg5el;c96o7;Hp~fru@R87FN=;)MGCIbzeL zZ;WJrQfj_pL5&%#LwZpz zN`b534~dM+cc;>X0}wNmoJUos$e0R|7^Sr42GIkWvSa%Qe9+t%iIUCIBz~jEhD7s& z;cA39;xI$Rt8f$2kw+-tP?@qu7Jf+OLske=svwk?j%}WXecb-8J8rLZnD{5f@b`n( zv#Mu<4LRiWGvUgECSu@Rqw3O+OB%_`E8I!4>@8AJu%(Q8s zuPJRE>H?E@$fB%_cF)&I(q%tkjUrAFFRo9BCGKeRCNWZ`_)**lt3s4)cA&bgM*sjhGSCMsS~QW|v9blf=JWyP3vJt?0y-6~Re)9%bS!ENvc{{KX?OqQYauLj&z zlwth`E>8h#*1sI@ml_TZ3*wmm1{FJdN(qGj*YH*Pm*Gp8r($VvBidIA9(UtjFUwV} z#2SQ~62Qo(X1P!J#pv?; z0ddjY-`bYHLXCjco-g=F$xK#C$mHJWqmw7rM?>%6ZG+*d$^qd@-6%=0ub|zvkT7Iw z1YpR1El?d}QKB?MGv5;=dmFne&&qgJNR&#I4Lr|x{~GHXMtH2Th~29BxFk6D->Lve z5L$dX{ht3oF18qetr>|v;+#LeaXf9SpJ&&>cl)aNxcgoo6|EoS`Y-o5*?9r@J$+jO z!$z!Z-qKP=(nY&)Le{qLrq^7p$c(Y+ z+bCr!Y-w~2DWXyh!4Lm{O(bbamVH^q`}MBI1yN2C})T_Z*?<#S6Azu^PeX z;&?}Ns$8bFr6Sk5ut<4ZA-vj29r;Ae3!6#?<8^bt;q221@K?7^IN#RABMCfweB1z| zjHWVCbAGb(adt~EP-$bLPCn?^+!gzyLR}Tl>&H4DhMs5cd?%A4{f|aJmm>8pjZUu` z_Y;o`G+PMO4WB=#HMqPT+C5)C-9NNzUa5^o3skN)oJ3?_y3G;{lZfRgOeG@^yxN^9 zK`xaW)2JNfHpsiIwEK+W#zfK_S?j5FaCv^|($mCPN2x0+(V|13Ws)qMb9GGqvN4>dMMFt2L8~l7!P06$#L!;kV`)F_^YD_b&-wM>tvs|f zXHw3_A`Bb&Mc+M@8o=4-PAk>vhjIG=6|5@XCgikfZ23A^Z<4mDDPN9=>S$d@27cm|*jyl%!Lbxv7TIVrIr{8rIABswoD0ez$%oLUu~u(e-S1l{#yX zBJo6sFaAY@w{$tU-Ej;KzWUGS_ezCVcQO;|EM0$vL3%T|(m)C=<{Zr@&l=jdTe`yvb5V8d{R}Z{CpSFW6sR$F%nsl-7K2g^!r1Hzel7t% z5Pa7UCPo93k$}C~wA|O+Rk5=G-3RuSwE zEG%inUD!N;tkxvkl&fW}0VC%P&uD3aH8aOdNJSNE-{eOGEmc|R`UM-1+7&}cwTFA7 zLtiaPPGce;?grtO1~c!97Z&QDew{8vA!gy0BK z+!NdY_5Ce73jUne*Ui{M%a#CF2n8Eor22GGVnJkD7WO<3Zxa{>#x^ZD1Gtu$vw+kc z5uvl(AtCXUtUq5nBy6=j&g3s(yLVulE#E4?Den}F0ogs+Y*kuq(? zKHT*$y0_^5STYRPsI->Gq{g~i=(2V-Sv?1f+xA@Tcq?^wq45hWy5ldd_z%cf*!iw> z+K4OWJmI!rK&_&m(Ap^WywvxLEc9`QBGB6q6}&7(o{f@0#fE4MK#)91q9O=AUJqwm z_aLqg5{bnh33IVVKaLt{wq(#ZMjhg_9f_j?57I>cR9#O#|1tLAvMcd)71{MBdJc)j zbKv#)Q*&J)>3L*g3P;jMS?S4ce>2u8_z&d7Ym3j`(hb-tB7G`G+*hIy4`Ye~@Aqy> zU=MtgGf_G5bu?yyXVF4D?0oPtJ<^Y8bh=cbD9 zfBuP@Uc*XpLk18nCkR4yON$OMT5Rg$;4kFTBXFy%cG?pp4vpb-4sW%GszW z;gX<51BP2Nr}G@XH&`P`C_6i?=GseA@v_RlYFX5BaANDPW+mqYEJ?lo^&TEAkx)_> zsYJk0xINGO*XLax9+m4GMU~~BcV50Gb|)X_uQS=Pk94k347=?UmXp)zuHtu-%}~@C z>>ci2*tsher3=K;`q-WB{Grwx0&L3$iQPuO0~4@%GR+TT>jJ zOYuGkRg}R>W8|T>g@YMKuoY)+vmz17i&|q-R2@(Z)a^6q;ERKj8fh_65($cmKJUg3 zm*KC&Rl`riSI6;>J@|_T@5&q92L3M{1WW8YVB3LWk33b6BOdPj>gVUzPu(AiK5jlI zmyPT9HU8>7NSgDm37bAIBZ%0N2stYAyYt_Y>J+^lPi?&|Z(LlDn6Z1fDPT`8_x#bP zcY4Kw?##6cR_;})jMa%-3QyQdV(4IuOHZ2&O~Th|AuEiHHh|)Y3kHW{EC+BU7<5Xf z5TA9NGVLi%T4K{n-NNArgl&Bdl&H-_#)Q&PWh=%Q7vw5+X>d&b@H*wRlSL0AGhT8M z$E%(rrtj9AOZkkw~?IB-R`x%WsLP~@V4)6s5xn4)#3pCf& zwL&}=#IW_3TFA;3Z!=4RG3|zGqf9`uwQNW41Iz#LJ^85Pap*}GTW@Prulv;M=~S=c zuiWZV^SR+kVNs=xxcub{Md>qRzf2%dv(>Fu)y?zGG#TmEb=`0v&)%NAuuZlB%1U+L zH8C8cO_61%O$rONJCbs&7`P4(^4qu(gkahq?hv!Kwzl$9(z-*Lv-U;9XAxSFF=W15y#YV)N%P0at6^x0`cqiE|YZ zn1t<2z{-q<>DNnbi00BeY=(xsG*;l%fia7ez5~^faDx3$&JA}| zGM~xrI99=CV5Ve)g?ujaA5z|;7FQfLOAd&Rl=V_Mwgt~YU}15%4x<~eV6TT>OqsCb zd;sy>*_)Vb4K!0Hwqf)-_hXaGW_dXR&LJHLl^;rkJ#RY?4Y7GMr{F{>FC8Nb#W+c> zt+bD)N8ss+_Wu9S_72>cf9bkz#kP%#ZKGn_wry3CifyxE+cqn%*tYFtzxD5R*6HqZ z_U;~|*ZvCc81HXB^O@IuU$wm!`LFr(^2d$!iF;opbORqaz<>!&L)O*X(t|%mAS@aEF`K*OC`qRD1z8xn zNCpu%Pkwps&OaMNP1bzWSpjSFY6cjx6j5+8ZYIwblVUhVXJEUToGbGu3-R17js`uw z0JL*aF?&A<=5*M>rcBHAc+n|+JhJ(ZA_4$ix)`R_azse|Ux zc)sXCR_k>XRqsZ|aX;(ibkSQ?Z0eSrMP?WyW^lPbXrLF{OyZbDrt-XiotD@FYzy8* zoQ_-SF^Jr3E5=zjU9uWrCs~(W&B+k7=Uhh3dDLRK>xs;`&03b@`kCPLKL4rx@IXJa zy9$5<)d7G=`Tu-h2{@+zf0}9kH}3~Y|JC2~r?KKsGwlWEU(K|*f@Q*pc>qO2)#buN zU+4e1zo+%D{+=uZ*xaDM)%P&pj{oWJX%?F${QgR&t;fgZj`7j3uDco(;_NpmEjT)B z1;E5#@B_kkd(ZYj*Y=xwZ6zr*;=!6Qa-oTqKVwrLm=Ao1yUR!Svs_NP3iuErI;EnZDR$%8zPE-F%TyT+j?H z^0Cd}Q||Nr``vSbzHZh2NDI&rzg$;j&Cc}9jq&ay66PK~5s)B(V20;NYHK`d@Br6=ZoFVc8Cr;vEYVW-ik!fRGz&Hx#IaydDXu7}A~3 zqTzjbS6<0%6CZv#F1>vHUW?nH3r?R6R^DwOWw4mDJhP!C%<1vYvi2Q~#}~cfVG78j z0`uH9-I3+G5*RE)vm%xgL+8L$#UbFte&O3_TqARz`ZzX#7Wbx5@-vUHq_8JDx##*r zi_5fopU%oTuE^7|SIET3(2R=B^@)x-3k>S}dv7yqnH>s;6}Q+*%qdK#h4xW%%G}Ye zr2clQ+77Rz>g|DwpRFtNDP#DQeooMV|be2aCH`W%w`R{sl0Si(pD#~ zHw#+_t-E39)MU>D29UX=q?qjpL=(0Zfv`hOK*vv{1dzI{dQQ<)PpL3MoX-H#t#LxZ z$}zYY_xjXa%a?RzFd8zeXdwLl_QfHmHI>w2Y=i=ofLpNpuY3B?ei(?B&>3xc2jc#* z=Kj@!;7jTHoZ!{=ylr_o$4?x|&;b!-$C9cs^m zOubZ@Dshy!wB8QhoV6rWRpG478f_{hMggFG2|C)!ZmRnqUtE>WRJoA>n?Poi|AA!9 zU)P&IKB#}a4^*|0!Uc#J{ye$jgqAO*MK$G?P;0Ud>NgbkL^_iFv+Hh@ z5Y&r*t~ndD5#nBJO5a2nOT|%s(-YIjso3Yzvfxesa8TgR8j-@QA$2N|(``Am zOjndUk%}}R<=x+q!(E>Cdks^bDVdycn*1nb*{&n9%+POi5XnX9vxk1?^{-Suv^u5f3GMTMKI3p*o* zcpT31J%$3LSg}|fJnjS>oOeXN_AksBDPJL8UI%_kHBc7_3pmjXc2z7(hFvk;qYBNU zMYPZzNHd=0iD5pzQ51$t@dV?NS}MiZm&L&F2Jds>Lm)NpIQ1(R@y1lpVMfLf2=RF8 zs+1*{qSi=4*V=@j*m5*EjxrUqMlm&YoczuP#jVCbn&i#jy0v{il(tl8UxjRQ2|OCu zpELTEx2rM0(pB&xayLdNBPA%uHElZwZ{AKs_c527`@x6l59Jn5Ps7E9Mw9neB~jjU z4RVd%h&<<}C-z0?LfH88e(IIJJLy~H<`S$`cL+Osz)I)VLF3kBHKc_wZTNZj_i#;k z0v)(Ze%LBK7|ZGvR1aq+Pi~u=>m}E{5E+{EDHhzZOu8_ZujDMZ0B&g*m<5S6P4zm} zfH>zHCY2`2d+51(sWNH+VEv~$mHqsbpUD+J7FC8}hQ9Fpc1B#wFq(#LqKKET_cXU) zjzif*DuCF|)1DX>znCP`YaMqIU-XPWX7;^(>#0fhK5`|f5KJ+L?6g;t_=f@+x|0|U z6t`uFJ6IG6EwYz^Ja3uYqpkF6d8$R?v_;$#*_0WReI~|vvb5I_3GDl$hzPIq%oT$Q z??5*uWoo^5d4Px)Yt|RQqfsgWW1qTD56QgW2wHG``~ie)mg7Jmu6#_6oXqxOux2BO zb%q6T2Bm?Z3^&PpuOII`+eRJjtpX=Ie=`F&#WHc-752^anp{8eH@DH*(vU<}X&_2g9(K^xX6Zh;pdEd=+Oh$jUdCY`T9LQG#ap+Kp z7KNi6W3l3ap&_GMY_ept6f&SJ?8^!o(R-w46NxWaq6z*D1Et}h{Q+=AO=)T84B<%> zL}J!b_@Vb*v#$OpbST8Ea)LB$*##Q1PS>!##fi+{%=@4jy`g0pU#7E4cII}=C4Z%N zZHdcmri_7uAos)2{2Ggn-q@aOzQ)}QpF^1iYC*AJi$c5Zf3hzFenfO+%4n%Lvjrj1NGs9jKB=M7$$C$T6t@0ngmgB%5x;LKcsMrn)wG^A&wnc>LL{T=te~r- zDlv_L`-NhM3XNA74Bs2^sMN5TU_YSs3Eo&VLhbGw`@kNPOF~Vaa2Po0_hQT~MhWLXk<5<9& zX-DSy^XAm@`98Jsu>}aDVE=Ogn+N#Rmd(IX%nH8Dn}x*Vf(2XAbJaA`#jPF}M{S_N z=<3k!ACIMCQBUtofUA%LFw+0$AdtMc@V^HFDg8YNRQWd$NIA_mfT#^Bd3$lyJ!6QK zeyyld2y}T)_J9o{3qEdiz>h&1jjecgJ4Pd631G8LXgW2nA&p(jyj=s3K!D5j+$Ooi z7Qw}9M&rSA*k>2gT#P}cs<|t&XshNlUJ;kcB%z%{YFg$G#`Vm38MvL@d}br4E4mG^ zdyuJj#11}x$@qd$SOM=v-&!PV`j9=fC_A+a6RWWx*dSoD=WX>~hciXZ_=6gFBjMRB zK~6De7?9i6jHCiooM&>9uQN!HFz(zCl`GV~w-hZ)9hM#U-F8n91f3D=9}A;!SJ-Cj z7xHo4O?#IWtn@nFJ`0{7{oI;1*%uzK!~7}PLE3T7Ys)Jy@xcX|9Wut&lu!zgd&-{T zvc%5Bw1jb^A80C{f7b~1#h&ui##&To{jGx%Pkxz>Ij64 zN{dtqnV|9)W4DgrCVa^zzZH$!o3J-ZAL z7+Lx{IWQOC?)GisR&HW8B`&2`bHc6r<&<@5{b50^BWmi13p-*p zy*Om#_lnkon``Gh+7$08B9YkZghm541(zh02}as97#Zu5eFZfcTMnmWXaM3UmSQn_FYidz5T-i&#@M+&`JbzD`hxo zkvszpvp^ov+Lb~j_V?{8oDuvkgXoPmx+G_xj<))UxBMh#>9&*%I2;!&*SDHR@46eK zmRc?D6^@N($~Q0CwGUPfPfXjcqagi5!clmnpz^Wp1Y=L?k@uj;l>7Wbyd z%bVsEHBdacZ0nC@gf!;^E(s$^tk7h_tn*8$M>GCFdNKoROHGiYGx=t*iB*=V9_NUG zG-kZ`;<_Ht?IMxzx!W4kK<;|~7sW(pi7>IC7<7*V1_9D~@I(ULJ8dF?{myUb;cTM@ zy-+T=YKo&eA>*j$3bV#tfMVHU@G8e1G&N4*!mZYL>qVbmG&RJXfN^6#lzpT^NdEN|^Lh9C?VI|ECz@zt7VW@ndyco~l1#-P%T zntn%_)q};FM+naILN;~^RZ2HRPLzjqt33LKqUvhtKvDY!JpxjR`CA|B`sWB|V2RxL z|LZSd;f53vuxvbY|FJs8E zVs}?nQq7X0(VYy`jEoUx=)Nn4U$Xq0hLNSUp+xkiwBJmyQih>D1?8E)x5|!xW8`n9 zI8v9EK#&~HL}+7@LJO*rnYKL7Q&`H;p`5s@WFGsENR~!-wf;!LpV7Wd4)xqjv#V4( znEt8zx>tdx-gGo%_AW?SJ4saKMN%%VG}{u@iS?~eMKaz5MPGaAsPL%A;#!2{_%nnz zU1aHz&TC%p){YS+7`k$!+c*VPyU9!i8sPU|Vne-2L1-L;@{aikj85ZbzFbG8uC+1b zpexf481|87zMq{lWGWR2`y2|WfP*la%seTmA>i`6WAUs_&%-?6hm3Xau0bZpuIFnNwSsMxRjW-!MnMpd41kTzF#auQ8i zS_SzHWLb)~zU)oOOT~hj`VDE;aIYSSpwY$+U+T%%MAfww%qMeEW1Ve}0%nce6DzHg zM`?nfd4v6Cs4{t+l-3Ez=A7iVinHIDjx18^yuL8~+I!aun6c5gf{&AKyP`93gVlhd+_!7`oYK zja27*t`zB%?6Dln_8JCmkmf(t+Tdwk2{6rdTR-2HR@d&i`5(JhL-v8ONIi~h_+Yv= zj(EK>{kxZ6Z)Fbek6j_cQBUZ~lYhGa8XSr&BK|Zu?ABeV{HfMfdDd^uDIEJOSDZ7) z5`_4eyf|KI?p^S?G(Mf!KAj%;7=7%0D93&B5|ePnRH*qNT++Dgx&X}(E7p5I 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⋘ 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 Z|Ce8Y4x|oV(Ehttps://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType>
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tLN0">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "LN0") +public class LN0 + extends TLN0 +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/ObjectFactory.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/ObjectFactory.java new file mode 100644 index 0000000..e404024 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/ObjectFactory.java @@ -0,0 +1,1398 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2026.03.02 时间 03:10:34 PM CST +// + + +package com.njcn.gather.icd.mapping.infrastructure.parser.generated; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the com.njcn.gather.icd.mapping.infrastructure.parser.generated package. + *

    An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _Substation_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "Substation"); + private final static QName _Process_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "Process"); + private final static QName _Line_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "Line"); + private final static QName _LN_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "LN"); + private final static QName _IED_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "IED"); + private final static QName _Communication_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "Communication"); + private final static QName _DataTypeTemplates_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "DataTypeTemplates"); + private final static QName _TSMVSettingsSmpRate_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "SmpRate"); + private final static QName _TSMVSettingsSamplesPerSec_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "SamplesPerSec"); + private final static QName _TSMVSettingsSecPerSamples_QNAME = new QName("http://www.iec.ch/61850/2003/SCL", "SecPerSamples"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.njcn.gather.icd.mapping.infrastructure.parser.generated + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link TSettingGroups } + * + */ + public TSettingGroups createTSettingGroups() { + return new TSettingGroups(); + } + + /** + * Create an instance of {@link TControlWithIEDName } + * + */ + public TControlWithIEDName createTControlWithIEDName() { + return new TControlWithIEDName(); + } + + /** + * Create an instance of {@link TServer } + * + */ + public TServer createTServer() { + return new TServer(); + } + + /** + * Create an instance of {@link THeader } + * + */ + public THeader createTHeader() { + return new THeader(); + } + + /** + * Create an instance of {@link TSampledValueControl } + * + */ + public TSampledValueControl createTSampledValueControl() { + return new TSampledValueControl(); + } + + /** + * Create an instance of {@link TReportControl } + * + */ + public TReportControl createTReportControl() { + return new TReportControl(); + } + + /** + * Create an instance of {@link TSubstation } + * + */ + public TSubstation createTSubstation() { + return new TSubstation(); + } + + /** + * Create an instance of {@link TProcess } + * + */ + public TProcess createTProcess() { + return new TProcess(); + } + + /** + * Create an instance of {@link TLine } + * + */ + public TLine createTLine() { + return new TLine(); + } + + /** + * Create an instance of {@link LN0 } + * + */ + public LN0 createLN0() { + return new LN0(); + } + + /** + * Create an instance of {@link TLN0 } + * + */ + public TLN0 createTLN0() { + return new TLN0(); + } + + /** + * Create an instance of {@link TText } + * + */ + public TText createTText() { + return new TText(); + } + + /** + * Create an instance of {@link TPrivate } + * + */ + public TPrivate createTPrivate() { + return new TPrivate(); + } + + /** + * Create an instance of {@link TDataSet } + * + */ + public TDataSet createTDataSet() { + return new TDataSet(); + } + + /** + * Create an instance of {@link TLogControl } + * + */ + public TLogControl createTLogControl() { + return new TLogControl(); + } + + /** + * Create an instance of {@link TDOI } + * + */ + public TDOI createTDOI() { + return new TDOI(); + } + + /** + * Create an instance of {@link TInputs } + * + */ + public TInputs createTInputs() { + return new TInputs(); + } + + /** + * Create an instance of {@link TOutputs } + * + */ + public TOutputs createTOutputs() { + return new TOutputs(); + } + + /** + * Create an instance of {@link TLog } + * + */ + public TLog createTLog() { + return new TLog(); + } + + /** + * Create an instance of {@link TLabels } + * + */ + public TLabels createTLabels() { + return new TLabels(); + } + + /** + * Create an instance of {@link TGSEControl } + * + */ + public TGSEControl createTGSEControl() { + return new TGSEControl(); + } + + /** + * Create an instance of {@link TSettingControl } + * + */ + public TSettingControl createTSettingControl() { + return new TSettingControl(); + } + + /** + * Create an instance of {@link TLN } + * + */ + public TLN createTLN() { + return new TLN(); + } + + /** + * Create an instance of {@link TIED } + * + */ + public TIED createTIED() { + return new TIED(); + } + + /** + * Create an instance of {@link TCommunication } + * + */ + public TCommunication createTCommunication() { + return new TCommunication(); + } + + /** + * Create an instance of {@link TDataTypeTemplates } + * + */ + public TDataTypeTemplates createTDataTypeTemplates() { + return new TDataTypeTemplates(); + } + + /** + * Create an instance of {@link SCL } + * + */ + public SCL createSCL() { + return new SCL(); + } + + /** + * Create an instance of {@link TLabel } + * + */ + public TLabel createTLabel() { + return new TLabel(); + } + + /** + * Create an instance of {@link THitem } + * + */ + public THitem createTHitem() { + return new THitem(); + } + + /** + * Create an instance of {@link THeaderSclRef } + * + */ + public THeaderSclRef createTHeaderSclRef() { + return new THeaderSclRef(); + } + + /** + * Create an instance of {@link TVal } + * + */ + public TVal createTVal() { + return new TVal(); + } + + /** + * Create an instance of {@link TValueWithUnit } + * + */ + public TValueWithUnit createTValueWithUnit() { + return new TValueWithUnit(); + } + + /** + * Create an instance of {@link TVoltage } + * + */ + public TVoltage createTVoltage() { + return new TVoltage(); + } + + /** + * Create an instance of {@link TDurationInSec } + * + */ + public TDurationInSec createTDurationInSec() { + return new TDurationInSec(); + } + + /** + * Create an instance of {@link TDurationInMilliSec } + * + */ + public TDurationInMilliSec createTDurationInMilliSec() { + return new TDurationInMilliSec(); + } + + /** + * Create an instance of {@link TBitRateInMbPerSec } + * + */ + public TBitRateInMbPerSec createTBitRateInMbPerSec() { + return new TBitRateInMbPerSec(); + } + + /** + * Create an instance of {@link TSclFileUUIDReference } + * + */ + public TSclFileUUIDReference createTSclFileUUIDReference() { + return new TSclFileUUIDReference(); + } + + /** + * Create an instance of {@link TConductingEquipment } + * + */ + public TConductingEquipment createTConductingEquipment() { + return new TConductingEquipment(); + } + + /** + * Create an instance of {@link TSubEquipment } + * + */ + public TSubEquipment createTSubEquipment() { + return new TSubEquipment(); + } + + /** + * Create an instance of {@link TPowerTransformer } + * + */ + public TPowerTransformer createTPowerTransformer() { + return new TPowerTransformer(); + } + + /** + * Create an instance of {@link TTransformerWinding } + * + */ + public TTransformerWinding createTTransformerWinding() { + return new TTransformerWinding(); + } + + /** + * Create an instance of {@link TTapChanger } + * + */ + public TTapChanger createTTapChanger() { + return new TTapChanger(); + } + + /** + * Create an instance of {@link TGeneralEquipment } + * + */ + public TGeneralEquipment createTGeneralEquipment() { + return new TGeneralEquipment(); + } + + /** + * Create an instance of {@link TVoltageLevel } + * + */ + public TVoltageLevel createTVoltageLevel() { + return new TVoltageLevel(); + } + + /** + * Create an instance of {@link TBay } + * + */ + public TBay createTBay() { + return new TBay(); + } + + /** + * Create an instance of {@link TLNode } + * + */ + public TLNode createTLNode() { + return new TLNode(); + } + + /** + * Create an instance of {@link TFunction } + * + */ + public TFunction createTFunction() { + return new TFunction(); + } + + /** + * Create an instance of {@link TSubFunction } + * + */ + public TSubFunction createTSubFunction() { + return new TSubFunction(); + } + + /** + * Create an instance of {@link TEqFunction } + * + */ + public TEqFunction createTEqFunction() { + return new TEqFunction(); + } + + /** + * Create an instance of {@link TEqSubFunction } + * + */ + public TEqSubFunction createTEqSubFunction() { + return new TEqSubFunction(); + } + + /** + * Create an instance of {@link TConnectivityNode } + * + */ + public TConnectivityNode createTConnectivityNode() { + return new TConnectivityNode(); + } + + /** + * Create an instance of {@link TTerminal } + * + */ + public TTerminal createTTerminal() { + return new TTerminal(); + } + + /** + * Create an instance of {@link TIEDSclRef } + * + */ + public TIEDSclRef createTIEDSclRef() { + return new TIEDSclRef(); + } + + /** + * Create an instance of {@link TMinRequestedSCDFiles } + * + */ + public TMinRequestedSCDFiles createTMinRequestedSCDFiles() { + return new TMinRequestedSCDFiles(); + } + + /** + * Create an instance of {@link TMinRequestedSCDFile } + * + */ + public TMinRequestedSCDFile createTMinRequestedSCDFile() { + return new TMinRequestedSCDFile(); + } + + /** + * Create an instance of {@link TServices } + * + */ + public TServices createTServices() { + return new TServices(); + } + + /** + * Create an instance of {@link TAccessPoint } + * + */ + public TAccessPoint createTAccessPoint() { + return new TAccessPoint(); + } + + /** + * Create an instance of {@link TCertificate } + * + */ + public TCertificate createTCertificate() { + return new TCertificate(); + } + + /** + * Create an instance of {@link TCert } + * + */ + public TCert createTCert() { + return new TCert(); + } + + /** + * Create an instance of {@link TServerAt } + * + */ + public TServerAt createTServerAt() { + return new TServerAt(); + } + + /** + * Create an instance of {@link TLDevice } + * + */ + public TLDevice createTLDevice() { + return new TLDevice(); + } + + /** + * Create an instance of {@link TAccessControl } + * + */ + public TAccessControl createTAccessControl() { + return new TAccessControl(); + } + + /** + * Create an instance of {@link TAssociation } + * + */ + public TAssociation createTAssociation() { + return new TAssociation(); + } + + /** + * Create an instance of {@link TFCDA } + * + */ + public TFCDA createTFCDA() { + return new TFCDA(); + } + + /** + * Create an instance of {@link TTrgOps } + * + */ + public TTrgOps createTTrgOps() { + return new TTrgOps(); + } + + /** + * Create an instance of {@link TRptEnabled } + * + */ + public TRptEnabled createTRptEnabled() { + return new TRptEnabled(); + } + + /** + * Create an instance of {@link TClientLN } + * + */ + public TClientLN createTClientLN() { + return new TClientLN(); + } + + /** + * Create an instance of {@link TExtRef } + * + */ + public TExtRef createTExtRef() { + return new TExtRef(); + } + + /** + * Create an instance of {@link TExtCtrl } + * + */ + public TExtCtrl createTExtCtrl() { + return new TExtCtrl(); + } + + /** + * Create an instance of {@link TProtocol } + * + */ + public TProtocol createTProtocol() { + return new TProtocol(); + } + + /** + * Create an instance of {@link TSDI } + * + */ + public TSDI createTSDI() { + return new TSDI(); + } + + /** + * Create an instance of {@link TDAI } + * + */ + public TDAI createTDAI() { + return new TDAI(); + } + + /** + * Create an instance of {@link TServiceYesNo } + * + */ + public TServiceYesNo createTServiceYesNo() { + return new TServiceYesNo(); + } + + /** + * Create an instance of {@link TServiceWithOptionalMax } + * + */ + public TServiceWithOptionalMax createTServiceWithOptionalMax() { + return new TServiceWithOptionalMax(); + } + + /** + * Create an instance of {@link TServiceWithMax } + * + */ + public TServiceWithMax createTServiceWithMax() { + return new TServiceWithMax(); + } + + /** + * Create an instance of {@link TServiceWithMaxNonZero } + * + */ + public TServiceWithMaxNonZero createTServiceWithMaxNonZero() { + return new TServiceWithMaxNonZero(); + } + + /** + * Create an instance of {@link TServiceConfReportControl } + * + */ + public TServiceConfReportControl createTServiceConfReportControl() { + return new TServiceConfReportControl(); + } + + /** + * Create an instance of {@link TServiceWithMaxAndMaxAttributes } + * + */ + public TServiceWithMaxAndMaxAttributes createTServiceWithMaxAndMaxAttributes() { + return new TServiceWithMaxAndMaxAttributes(); + } + + /** + * Create an instance of {@link TServiceWithMaxAndModify } + * + */ + public TServiceWithMaxAndModify createTServiceWithMaxAndModify() { + return new TServiceWithMaxAndModify(); + } + + /** + * Create an instance of {@link TServiceForConfDataSet } + * + */ + public TServiceForConfDataSet createTServiceForConfDataSet() { + return new TServiceForConfDataSet(); + } + + /** + * Create an instance of {@link TClientServices } + * + */ + public TClientServices createTClientServices() { + return new TClientServices(); + } + + /** + * Create an instance of {@link TReportSettings } + * + */ + public TReportSettings createTReportSettings() { + return new TReportSettings(); + } + + /** + * Create an instance of {@link TLogSettings } + * + */ + public TLogSettings createTLogSettings() { + return new TLogSettings(); + } + + /** + * Create an instance of {@link TGSESettings } + * + */ + public TGSESettings createTGSESettings() { + return new TGSESettings(); + } + + /** + * Create an instance of {@link TSMVSettings } + * + */ + public TSMVSettings createTSMVSettings() { + return new TSMVSettings(); + } + + /** + * Create an instance of {@link TConfLNs } + * + */ + public TConfLNs createTConfLNs() { + return new TConfLNs(); + } + + /** + * Create an instance of {@link TValueHandling } + * + */ + public TValueHandling createTValueHandling() { + return new TValueHandling(); + } + + /** + * Create an instance of {@link TFileHandling } + * + */ + public TFileHandling createTFileHandling() { + return new TFileHandling(); + } + + /** + * Create an instance of {@link TGOOSEcapabilities } + * + */ + public TGOOSEcapabilities createTGOOSEcapabilities() { + return new TGOOSEcapabilities(); + } + + /** + * Create an instance of {@link TRedProt } + * + */ + public TRedProt createTRedProt() { + return new TRedProt(); + } + + /** + * Create an instance of {@link TTimeSyncProt } + * + */ + public TTimeSyncProt createTTimeSyncProt() { + return new TTimeSyncProt(); + } + + /** + * Create an instance of {@link TSMVsc } + * + */ + public TSMVsc createTSMVsc() { + return new TSMVsc(); + } + + /** + * Create an instance of {@link TSupSubscription } + * + */ + public TSupSubscription createTSupSubscription() { + return new TSupSubscription(); + } + + /** + * Create an instance of {@link TCommProt } + * + */ + public TCommProt createTCommProt() { + return new TCommProt(); + } + + /** + * Create an instance of {@link TSCSM } + * + */ + public TSCSM createTSCSM() { + return new TSCSM(); + } + + /** + * Create an instance of {@link TMcSecurity } + * + */ + public TMcSecurity createTMcSecurity() { + return new TMcSecurity(); + } + + /** + * Create an instance of {@link TSecurity } + * + */ + public TSecurity createTSecurity() { + return new TSecurity(); + } + + /** + * Create an instance of {@link TKDC } + * + */ + public TKDC createTKDC() { + return new TKDC(); + } + + /** + * Create an instance of {@link TSubNetwork } + * + */ + public TSubNetwork createTSubNetwork() { + return new TSubNetwork(); + } + + /** + * Create an instance of {@link TConnectedAP } + * + */ + public TConnectedAP createTConnectedAP() { + return new TConnectedAP(); + } + + /** + * Create an instance of {@link TAddress } + * + */ + public TAddress createTAddress() { + return new TAddress(); + } + + /** + * Create an instance of {@link TGSE } + * + */ + public TGSE createTGSE() { + return new TGSE(); + } + + /** + * Create an instance of {@link TSMV } + * + */ + public TSMV createTSMV() { + return new TSMV(); + } + + /** + * Create an instance of {@link TPhysConn } + * + */ + public TPhysConn createTPhysConn() { + return new TPhysConn(); + } + + /** + * Create an instance of {@link TPPhysConn } + * + */ + public TPPhysConn createTPPhysConn() { + return new TPPhysConn(); + } + + /** + * Create an instance of {@link TP } + * + */ + public TP createTP() { + return new TP(); + } + + /** + * Create an instance of {@link TPIP } + * + */ + public TPIP createTPIP() { + return new TPIP(); + } + + /** + * Create an instance of {@link TPIPSUBNET } + * + */ + public TPIPSUBNET createTPIPSUBNET() { + return new TPIPSUBNET(); + } + + /** + * Create an instance of {@link TPIPGATEWAY } + * + */ + public TPIPGATEWAY createTPIPGATEWAY() { + return new TPIPGATEWAY(); + } + + /** + * Create an instance of {@link TPIPv6 } + * + */ + public TPIPv6 createTPIPv6() { + return new TPIPv6(); + } + + /** + * Create an instance of {@link TPIPv6SUBNET } + * + */ + public TPIPv6SUBNET createTPIPv6SUBNET() { + return new TPIPv6SUBNET(); + } + + /** + * Create an instance of {@link TPIPv6GATEWAY } + * + */ + public TPIPv6GATEWAY createTPIPv6GATEWAY() { + return new TPIPv6GATEWAY(); + } + + /** + * Create an instance of {@link TPDNSName } + * + */ + public TPDNSName createTPDNSName() { + return new TPDNSName(); + } + + /** + * Create an instance of {@link TPIPv6FlowLabel } + * + */ + public TPIPv6FlowLabel createTPIPv6FlowLabel() { + return new TPIPv6FlowLabel(); + } + + /** + * Create an instance of {@link TPOSINSAP } + * + */ + public TPOSINSAP createTPOSINSAP() { + return new TPOSINSAP(); + } + + /** + * Create an instance of {@link TPOSITSEL } + * + */ + public TPOSITSEL createTPOSITSEL() { + return new TPOSITSEL(); + } + + /** + * Create an instance of {@link TPOSISSEL } + * + */ + public TPOSISSEL createTPOSISSEL() { + return new TPOSISSEL(); + } + + /** + * Create an instance of {@link TPOSIPSEL } + * + */ + public TPOSIPSEL createTPOSIPSEL() { + return new TPOSIPSEL(); + } + + /** + * Create an instance of {@link TPOSIAPTitle } + * + */ + public TPOSIAPTitle createTPOSIAPTitle() { + return new TPOSIAPTitle(); + } + + /** + * Create an instance of {@link TPOSIAPInvoke } + * + */ + public TPOSIAPInvoke createTPOSIAPInvoke() { + return new TPOSIAPInvoke(); + } + + /** + * Create an instance of {@link TPOSIAEQualifier } + * + */ + public TPOSIAEQualifier createTPOSIAEQualifier() { + return new TPOSIAEQualifier(); + } + + /** + * Create an instance of {@link TPOSIAEInvoke } + * + */ + public TPOSIAEInvoke createTPOSIAEInvoke() { + return new TPOSIAEInvoke(); + } + + /** + * Create an instance of {@link TPMACAddress } + * + */ + public TPMACAddress createTPMACAddress() { + return new TPMACAddress(); + } + + /** + * Create an instance of {@link TPAPPID } + * + */ + public TPAPPID createTPAPPID() { + return new TPAPPID(); + } + + /** + * Create an instance of {@link TPVLANPRIORITY } + * + */ + public TPVLANPRIORITY createTPVLANPRIORITY() { + return new TPVLANPRIORITY(); + } + + /** + * Create an instance of {@link TPVLANID } + * + */ + public TPVLANID createTPVLANID() { + return new TPVLANID(); + } + + /** + * Create an instance of {@link TPSNTPPort } + * + */ + public TPSNTPPort createTPSNTPPort() { + return new TPSNTPPort(); + } + + /** + * Create an instance of {@link TPMMSPort } + * + */ + public TPMMSPort createTPMMSPort() { + return new TPMMSPort(); + } + + /** + * Create an instance of {@link TPUDPPort } + * + */ + public TPUDPPort createTPUDPPort() { + return new TPUDPPort(); + } + + /** + * Create an instance of {@link TPTCPPort } + * + */ + public TPTCPPort createTPTCPPort() { + return new TPTCPPort(); + } + + /** + * Create an instance of {@link TPIPv6ClassOfTraffic } + * + */ + public TPIPv6ClassOfTraffic createTPIPv6ClassOfTraffic() { + return new TPIPv6ClassOfTraffic(); + } + + /** + * Create an instance of {@link TPC37118IPPort } + * + */ + public TPC37118IPPort createTPC37118IPPort() { + return new TPC37118IPPort(); + } + + /** + * Create an instance of {@link TPIPv6IGMPv3Src } + * + */ + public TPIPv6IGMPv3Src createTPIPv6IGMPv3Src() { + return new TPIPv6IGMPv3Src(); + } + + /** + * Create an instance of {@link TPIPIGMPv3Src } + * + */ + public TPIPIGMPv3Src createTPIPIGMPv3Src() { + return new TPIPIGMPv3Src(); + } + + /** + * Create an instance of {@link TPIPClassOfTraffic } + * + */ + public TPIPClassOfTraffic createTPIPClassOfTraffic() { + return new TPIPClassOfTraffic(); + } + + /** + * Create an instance of {@link TLNodeType } + * + */ + public TLNodeType createTLNodeType() { + return new TLNodeType(); + } + + /** + * Create an instance of {@link TDO } + * + */ + public TDO createTDO() { + return new TDO(); + } + + /** + * Create an instance of {@link TDOType } + * + */ + public TDOType createTDOType() { + return new TDOType(); + } + + /** + * Create an instance of {@link TSDO } + * + */ + public TSDO createTSDO() { + return new TSDO(); + } + + /** + * Create an instance of {@link TDA } + * + */ + public TDA createTDA() { + return new TDA(); + } + + /** + * Create an instance of {@link TDAType } + * + */ + public TDAType createTDAType() { + return new TDAType(); + } + + /** + * Create an instance of {@link TBDA } + * + */ + public TBDA createTBDA() { + return new TBDA(); + } + + /** + * Create an instance of {@link TEnumType } + * + */ + public TEnumType createTEnumType() { + return new TEnumType(); + } + + /** + * Create an instance of {@link TProtNs } + * + */ + public TProtNs createTProtNs() { + return new TProtNs(); + } + + /** + * Create an instance of {@link TEnumVal } + * + */ + public TEnumVal createTEnumVal() { + return new TEnumVal(); + } + + /** + * Create an instance of {@link TSettingGroups.SGEdit } + * + */ + public TSettingGroups.SGEdit createTSettingGroupsSGEdit() { + return new TSettingGroups.SGEdit(); + } + + /** + * Create an instance of {@link TSettingGroups.ConfSG } + * + */ + public TSettingGroups.ConfSG createTSettingGroupsConfSG() { + return new TSettingGroups.ConfSG(); + } + + /** + * Create an instance of {@link TControlWithIEDName.IEDName } + * + */ + public TControlWithIEDName.IEDName createTControlWithIEDNameIEDName() { + return new TControlWithIEDName.IEDName(); + } + + /** + * Create an instance of {@link TServer.Authentication } + * + */ + public TServer.Authentication createTServerAuthentication() { + return new TServer.Authentication(); + } + + /** + * Create an instance of {@link THeader.History } + * + */ + public THeader.History createTHeaderHistory() { + return new THeader.History(); + } + + /** + * Create an instance of {@link TSampledValueControl.SmvOpts } + * + */ + public TSampledValueControl.SmvOpts createTSampledValueControlSmvOpts() { + return new TSampledValueControl.SmvOpts(); + } + + /** + * Create an instance of {@link TReportControl.OptFields } + * + */ + public TReportControl.OptFields createTReportControlOptFields() { + return new TReportControl.OptFields(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TSubstation }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TSubstation }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "Substation") + public JAXBElement createSubstation(TSubstation value) { + return new JAXBElement(_Substation_QNAME, TSubstation.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TProcess }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TProcess }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "Process") + public JAXBElement createProcess(TProcess value) { + return new JAXBElement(_Process_QNAME, TProcess.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TLine }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TLine }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "Line") + public JAXBElement createLine(TLine value) { + return new JAXBElement(_Line_QNAME, TLine.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TLN }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TLN }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "LN") + public JAXBElement createLN(TLN value) { + return new JAXBElement(_LN_QNAME, TLN.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TIED }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TIED }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "IED") + public JAXBElement createIED(TIED value) { + return new JAXBElement(_IED_QNAME, TIED.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TCommunication }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TCommunication }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "Communication") + public JAXBElement createCommunication(TCommunication value) { + return new JAXBElement(_Communication_QNAME, TCommunication.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link TDataTypeTemplates }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link TDataTypeTemplates }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "DataTypeTemplates") + public JAXBElement createDataTypeTemplates(TDataTypeTemplates value) { + return new JAXBElement(_DataTypeTemplates_QNAME, TDataTypeTemplates.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Long }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link Long }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "SmpRate", scope = TSMVSettings.class) + public JAXBElement createTSMVSettingsSmpRate(Long value) { + return new JAXBElement(_TSMVSettingsSmpRate_QNAME, Long.class, TSMVSettings.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Long }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link Long }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "SamplesPerSec", scope = TSMVSettings.class) + public JAXBElement createTSMVSettingsSamplesPerSec(Long value) { + return new JAXBElement(_TSMVSettingsSamplesPerSec_QNAME, Long.class, TSMVSettings.class, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Long }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link Long }{@code >} + */ + @XmlElementDecl(namespace = "http://www.iec.ch/61850/2003/SCL", name = "SecPerSamples", scope = TSMVSettings.class) + public JAXBElement createTSMVSettingsSecPerSamples(Long value) { + return new JAXBElement(_TSMVSettingsSecPerSamples_QNAME, Long.class, TSMVSettings.class, value); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/SCL.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/SCL.java new file mode 100644 index 0000000..928b50c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/SCL.java @@ -0,0 +1,351 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType>
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <sequence>
    + *         <element name="Header" type="{http://www.iec.ch/61850/2003/SCL}tHeader"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}Substation" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}Communication" minOccurs="0"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}IED" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}DataTypeTemplates" minOccurs="0"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}Line" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}Process" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="version" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSclVersion" fixed="2007" />
    + *       <attribute name="revision" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSclRevision" fixed="C" />
    + *       <attribute name="release" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSclRelease" fixed="5" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 substation; + @XmlElement(name = "Communication") + protected TCommunication communication; + @XmlElement(name = "IED") + protected List ied; + @XmlElement(name = "DataTypeTemplates") + protected TDataTypeTemplates dataTypeTemplates; + @XmlElement(name = "Line") + protected List line; + @XmlElement(name = "Process") + protected List 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. + * + *

    + * 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 set method for the substation property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubstation().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubstation } + * + * + */ + public List getSubstation() { + if (substation == null) { + substation = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the ied property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getIED().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TIED } + * + * + */ + public List getIED() { + if (ied == null) { + ied = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the line property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLine().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLine } + * + * + */ + public List getLine() { + if (line == null) { + line = new ArrayList(); + } + return this.line; + } + + /** + * Gets the value of the process property. + * + *

    + * 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 set method for the process property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getProcess().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TProcess } + * + * + */ + public List getProcess() { + if (process == null) { + process = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractConductingEquipment.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractConductingEquipment.java new file mode 100644 index 0000000..59b23fe --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractConductingEquipment.java @@ -0,0 +1,117 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAbstractConductingEquipment complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAbstractConductingEquipment">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tEquipment">
    + *       <sequence>
    + *         <element name="Terminal" type="{http://www.iec.ch/61850/2003/SCL}tTerminal" maxOccurs="2" minOccurs="0"/>
    + *         <element name="SubEquipment" type="{http://www.iec.ch/61850/2003/SCL}tSubEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 terminal; + @XmlElement(name = "SubEquipment") + protected List subEquipment; + + /** + * Gets the value of the terminal property. + * + *

    + * 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 set method for the terminal property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getTerminal().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TTerminal } + * + * + */ + public List getTerminal() { + if (terminal == null) { + terminal = new ArrayList(); + } + return this.terminal; + } + + /** + * Gets the value of the subEquipment property. + * + *

    + * 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 set method for the subEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubEquipment } + * + * + */ + public List getSubEquipment() { + if (subEquipment == null) { + subEquipment = new ArrayList(); + } + return this.subEquipment; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractDataAttribute.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractDataAttribute.java new file mode 100644 index 0000000..013f824 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractDataAttribute.java @@ -0,0 +1,325 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAbstractDataAttribute complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAbstractDataAttribute">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Val" type="{http://www.iec.ch/61850/2003/SCL}tVal" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAttributeNameEnum" />
    + *       <attribute name="sAddr">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <maxLength value="255"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="bType" use="required" type="{http://www.iec.ch/61850/2003/SCL}tBasicTypeEnum" />
    + *       <attribute name="valKind" type="{http://www.iec.ch/61850/2003/SCL}tValKindEnum" default="Set" />
    + *       <attribute name="type" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" />
    + *       <attribute name="count" type="{http://www.iec.ch/61850/2003/SCL}tDACount" default="0" />
    + *       <attribute name="valImport" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 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 count; + @XmlAttribute(name = "valImport") + protected Boolean valImport; + + /** + * Gets the value of the val property. + * + *

    + * 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 set method for the val property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getVal().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TVal } + * + * + */ + public List getVal() { + if (val == null) { + val = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the count property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getCount().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getCount() { + if (count == null) { + count = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractEqFuncSubFunc.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractEqFuncSubFunc.java new file mode 100644 index 0000000..4671878 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAbstractEqFuncSubFunc.java @@ -0,0 +1,150 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAbstractEqFuncSubFunc complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAbstractEqFuncSubFunc">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="GeneralEquipment" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="EqSubFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqSubFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 generalEquipment; + @XmlElement(name = "EqSubFunction") + protected List eqSubFunction; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String type; + + /** + * Gets the value of the generalEquipment property. + * + *

    + * 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 set method for the generalEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGeneralEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGeneralEquipment } + * + * + */ + public List getGeneralEquipment() { + if (generalEquipment == null) { + generalEquipment = new ArrayList(); + } + return this.generalEquipment; + } + + /** + * Gets the value of the eqSubFunction property. + * + *

    + * 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 set method for the eqSubFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqSubFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqSubFunction } + * + * + */ + public List getEqSubFunction() { + if (eqSubFunction == null) { + eqSubFunction = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessControl.java new file mode 100644 index 0000000..f237607 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessControl.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAccessControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAccessControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAnyContentFromOtherNamespace">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tAccessControl") +public class TAccessControl + extends TAnyContentFromOtherNamespace +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessPoint.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessPoint.java new file mode 100644 index 0000000..9f5b938 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAccessPoint.java @@ -0,0 +1,436 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAccessPoint complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAccessPoint">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <choice minOccurs="0">
    + *           <element name="Server" type="{http://www.iec.ch/61850/2003/SCL}tServer"/>
    + *           <element ref="{http://www.iec.ch/61850/2003/SCL}LN" maxOccurs="unbounded"/>
    + *           <element name="ServerAt" type="{http://www.iec.ch/61850/2003/SCL}tServerAt"/>
    + *         </choice>
    + *         <element name="Services" type="{http://www.iec.ch/61850/2003/SCL}tServices" minOccurs="0"/>
    + *         <element name="GOOSESecurity" type="{http://www.iec.ch/61850/2003/SCL}tCertificate" maxOccurs="7" minOccurs="0"/>
    + *         <element name="SMVSecurity" type="{http://www.iec.ch/61850/2003/SCL}tCertificate" maxOccurs="7" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *       <attribute name="router" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="clock" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="kdc" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 ln; + @XmlElement(name = "ServerAt") + protected TServerAt serverAt; + @XmlElement(name = "Services") + protected TServices services; + @XmlElement(name = "GOOSESecurity") + protected List gooseSecurity; + @XmlElement(name = "SMVSecurity") + protected List 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. + * + *

    + * 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 set method for the ln property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLN().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLN } + * + * + */ + public List getLN() { + if (ln == null) { + ln = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the gooseSecurity property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGOOSESecurity().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TCertificate } + * + * + */ + public List getGOOSESecurity() { + if (gooseSecurity == null) { + gooseSecurity = new ArrayList(); + } + return this.gooseSecurity; + } + + /** + * Gets the value of the smvSecurity property. + * + *

    + * 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 set method for the smvSecurity property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSMVSecurity().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TCertificate } + * + * + */ + public List getSMVSecurity() { + if (smvSecurity == null) { + smvSecurity = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAddress.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAddress.java new file mode 100644 index 0000000..3cc2f38 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAddress.java @@ -0,0 +1,76 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAddress complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAddress">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <sequence>
    + *         <element name="P" type="{http://www.iec.ch/61850/2003/SCL}tP" maxOccurs="unbounded"/>
    + *       </sequence>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tAddress", propOrder = { + "p" +}) +public class TAddress { + + @XmlElement(name = "P", required = true) + protected List p; + + /** + * Gets the value of the p property. + * + *

    + * 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 set method for the p property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getP().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TP } + * + * + */ + public List getP() { + if (p == null) { + p = new ArrayList(); + } + return this.p; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyContentFromOtherNamespace.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyContentFromOtherNamespace.java new file mode 100644 index 0000000..179c77c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyContentFromOtherNamespace.java @@ -0,0 +1,113 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAnyContentFromOtherNamespace complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAnyContentFromOtherNamespace">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <sequence maxOccurs="unbounded" minOccurs="0">
    + *         <any processContents='lax' namespace='##other'/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 content; + @XmlAnyAttribute + private Map otherAttributes = new HashMap(); + + /** + * Gets the value of the content property. + * + *

    + * 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 set method for the content property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getContent().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link Element } + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + /** + * Gets a map that contains attributes that aren't bound to any typed property on this class. + * + *

    + * 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 getOtherAttributes() { + return otherAttributes; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyLN.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyLN.java new file mode 100644 index 0000000..ea3a21b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAnyLN.java @@ -0,0 +1,384 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAnyLN complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAnyLN">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="DataSet" type="{http://www.iec.ch/61850/2003/SCL}tDataSet" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="ReportControl" type="{http://www.iec.ch/61850/2003/SCL}tReportControl" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="LogControl" type="{http://www.iec.ch/61850/2003/SCL}tLogControl" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="DOI" type="{http://www.iec.ch/61850/2003/SCL}tDOI" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Inputs" type="{http://www.iec.ch/61850/2003/SCL}tInputs" minOccurs="0"/>
    + *         <element name="Outputs" type="{http://www.iec.ch/61850/2003/SCL}tOutputs" minOccurs="0"/>
    + *         <element name="Log" type="{http://www.iec.ch/61850/2003/SCL}tLog" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="lnType" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 dataSet; + @XmlElement(name = "ReportControl") + protected List reportControl; + @XmlElement(name = "LogControl") + protected List logControl; + @XmlElement(name = "DOI") + protected List doi; + @XmlElement(name = "Inputs") + protected TInputs inputs; + @XmlElement(name = "Outputs") + protected TOutputs outputs; + @XmlElement(name = "Log") + protected List 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. + * + *

    + * 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 set method for the dataSet property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getDataSet().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TDataSet } + * + * + */ + public List getDataSet() { + if (dataSet == null) { + dataSet = new ArrayList(); + } + return this.dataSet; + } + + /** + * Gets the value of the reportControl property. + * + *

    + * 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 set method for the reportControl property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getReportControl().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TReportControl } + * + * + */ + public List getReportControl() { + if (reportControl == null) { + reportControl = new ArrayList(); + } + return this.reportControl; + } + + /** + * Gets the value of the logControl property. + * + *

    + * 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 set method for the logControl property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLogControl().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLogControl } + * + * + */ + public List getLogControl() { + if (logControl == null) { + logControl = new ArrayList(); + } + return this.logControl; + } + + /** + * Gets the value of the doi property. + * + *

    + * 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 set method for the doi property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getDOI().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TDOI } + * + * + */ + public List getDOI() { + if (doi == null) { + doi = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the log property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLog().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLog } + * + * + */ + public List getLog() { + if (log == null) { + log = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociation.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociation.java new file mode 100644 index 0000000..71fe4c1 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociation.java @@ -0,0 +1,359 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAssociation complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tAssociation">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agLNRef"/>
    + *       <attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *       <attribute name="kind" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAssociationKindEnum" />
    + *       <attribute name="associationID" type="{http://www.iec.ch/61850/2003/SCL}tAssociationID" />
    + *       <attribute name="initiator" type="{http://www.iec.ch/61850/2003/SCL}tAssociationInitiator" default="client" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationInitiator.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationInitiator.java new file mode 100644 index 0000000..3781829 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationInitiator.java @@ -0,0 +1,58 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAssociationInitiator的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tAssociationInitiator">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}token">
    + *     <enumeration value="client"/>
    + *     <enumeration value="server"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationKindEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationKindEnum.java new file mode 100644 index 0000000..6db3c67 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAssociationKindEnum.java @@ -0,0 +1,58 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAssociationKindEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tAssociationKindEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}token">
    + *     <enumeration value="pre-established"/>
    + *     <enumeration value="predefined"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAuthenticationEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAuthenticationEnum.java new file mode 100644 index 0000000..9e8fa27 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TAuthenticationEnum.java @@ -0,0 +1,67 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tAuthenticationEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tAuthenticationEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="none"/>
    + *     <enumeration value="password"/>
    + *     <enumeration value="weak"/>
    + *     <enumeration value="strong"/>
    + *     <enumeration value="certificate"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBDA.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBDA.java new file mode 100644 index 0000000..63a077f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBDA.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tBDA complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tBDA">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractDataAttribute">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tBDA") +public class TBDA + extends TAbstractDataAttribute +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBaseElement.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBaseElement.java new file mode 100644 index 0000000..29ab412 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBaseElement.java @@ -0,0 +1,176 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tBaseElement complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tBaseElement">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <sequence>
    + *         <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Text" type="{http://www.iec.ch/61850/2003/SCL}tText" minOccurs="0"/>
    + *         <element name="Private" type="{http://www.iec.ch/61850/2003/SCL}tPrivate" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 any; + @XmlElement(name = "Text") + protected TText text; + @XmlElement(name = "Private") + protected List _private; + @XmlAnyAttribute + private Map otherAttributes = new HashMap(); + + /** + * Gets the value of the any property. + * + *

    + * 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 set method for the any property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getAny().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link Element } + * {@link Object } + * + * + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the private property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getPrivate().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TPrivate } + * + * + */ + public List getPrivate() { + if (_private == null) { + _private = new ArrayList(); + } + return this._private; + } + + /** + * Gets a map that contains attributes that aren't bound to any typed property on this class. + * + *

    + * 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 getOtherAttributes() { + return otherAttributes; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBay.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBay.java new file mode 100644 index 0000000..312e4a0 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBay.java @@ -0,0 +1,145 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tBay complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tBay">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tEquipmentContainer">
    + *       <sequence>
    + *         <element name="ConductingEquipment" type="{http://www.iec.ch/61850/2003/SCL}tConductingEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="ConnectivityNode" type="{http://www.iec.ch/61850/2003/SCL}tConnectivityNode" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Function" type="{http://www.iec.ch/61850/2003/SCL}tFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tBay", propOrder = { + "conductingEquipment", + "connectivityNode", + "function" +}) +public class TBay + extends TEquipmentContainer +{ + + @XmlElement(name = "ConductingEquipment") + protected List conductingEquipment; + @XmlElement(name = "ConnectivityNode") + protected List connectivityNode; + @XmlElement(name = "Function") + protected List function; + + /** + * Gets the value of the conductingEquipment property. + * + *

    + * 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 set method for the conductingEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConductingEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConductingEquipment } + * + * + */ + public List getConductingEquipment() { + if (conductingEquipment == null) { + conductingEquipment = new ArrayList(); + } + return this.conductingEquipment; + } + + /** + * Gets the value of the connectivityNode property. + * + *

    + * 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 set method for the connectivityNode property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConnectivityNode().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConnectivityNode } + * + * + */ + public List getConnectivityNode() { + if (connectivityNode == null) { + connectivityNode = new ArrayList(); + } + return this.connectivityNode; + } + + /** + * Gets the value of the function property. + * + *

    + * 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 set method for the function property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TFunction } + * + * + */ + public List getFunction() { + if (function == null) { + function = new ArrayList(); + } + return this.function; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBitRateInMbPerSec.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBitRateInMbPerSec.java new file mode 100644 index 0000000..ac42d9b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TBitRateInMbPerSec.java @@ -0,0 +1,136 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tBitRateInMbPerSec complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tBitRateInMbPerSec">
    + *   <simpleContent>
    + *     <extension base="<http://www.w3.org/2001/XMLSchema>decimal">
    + *       <attribute name="unit" type="{http://www.w3.org/2001/XMLSchema}normalizedString" fixed="b/s" />
    + *       <attribute name="multiplier" type="{http://www.iec.ch/61850/2003/SCL}tUnitMultiplierEnum" fixed="M" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCert.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCert.java new file mode 100644 index 0000000..ff50032 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCert.java @@ -0,0 +1,110 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tCert complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tCert">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="commonName" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <minLength value="4"/>
    + *             <pattern value="none"/>
    + *             <pattern value="CN=.+"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="idHierarchy" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <minLength value="1"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCertificate.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCertificate.java new file mode 100644 index 0000000..c7bb0bc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCertificate.java @@ -0,0 +1,167 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tCertificate complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tCertificate">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tNaming">
    + *       <sequence>
    + *         <element name="Subject" type="{http://www.iec.ch/61850/2003/SCL}tCert"/>
    + *         <element name="IssuerName" type="{http://www.iec.ch/61850/2003/SCL}tCert"/>
    + *       </sequence>
    + *       <attribute name="xferNumber" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="serialNumber" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <minLength value="1"/>
    + *             <pattern value="[0-9]+"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientLN.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientLN.java new file mode 100644 index 0000000..ae58e37 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientLN.java @@ -0,0 +1,273 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tClientLN complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tClientLN">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agLNRef"/>
    + *       <attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientServices.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientServices.java new file mode 100644 index 0000000..d3b2a84 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TClientServices.java @@ -0,0 +1,623 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tClientServices complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tClientServices">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <sequence>
    + *         <element name="TimeSyncProt" type="{http://www.iec.ch/61850/2003/SCL}tTimeSyncProt" minOccurs="0"/>
    + *         <element name="GOOSEMcSecurity" type="{http://www.iec.ch/61850/2003/SCL}tMcSecurity" minOccurs="0"/>
    + *         <element name="SVMcSecurity" type="{http://www.iec.ch/61850/2003/SCL}tMcSecurity" minOccurs="0"/>
    + *         <element name="Security" type="{http://www.iec.ch/61850/2003/SCL}tSecurity" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="goose" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="gsse" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="bufReport" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="unbufReport" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="readLog" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="sv" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="supportsLdName" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="maxAttributes">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="maxReports">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="maxGOOSE">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="maxSMV">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="rGOOSE" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="rSV" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="noIctBinding" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="acceptServerInitiatedAssociation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommProt.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommProt.java new file mode 100644 index 0000000..78f5161 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommProt.java @@ -0,0 +1,71 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tCommProt complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tCommProt">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    + *       <attribute name="ipv6" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommunication.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommunication.java new file mode 100644 index 0000000..5a58e2a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TCommunication.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tCommunication complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tCommunication">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="SubNetwork" type="{http://www.iec.ch/61850/2003/SCL}tSubNetwork" maxOccurs="unbounded"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tCommunication", propOrder = { + "subNetwork" +}) +public class TCommunication + extends TUnNaming +{ + + @XmlElement(name = "SubNetwork", required = true) + protected List subNetwork; + + /** + * Gets the value of the subNetwork property. + * + *

    + * 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 set method for the subNetwork property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubNetwork().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubNetwork } + * + * + */ + public List getSubNetwork() { + if (subNetwork == null) { + subNetwork = new ArrayList(); + } + return this.subNetwork; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConductingEquipment.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConductingEquipment.java new file mode 100644 index 0000000..e8c6b68 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConductingEquipment.java @@ -0,0 +1,107 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tConductingEquipment complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tConductingEquipment">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractConductingEquipment">
    + *       <sequence>
    + *         <element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCommonConductingEquipmentEnum" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tConductingEquipment", propOrder = { + "eqFunction" +}) +public class TConductingEquipment + extends TAbstractConductingEquipment +{ + + @XmlElement(name = "EqFunction") + protected List eqFunction; + @XmlAttribute(name = "type", required = true) + protected String type; + + /** + * Gets the value of the eqFunction property. + * + *

    + * 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 set method for the eqFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqFunction } + * + * + */ + public List getEqFunction() { + if (eqFunction == null) { + eqFunction = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConfLNs.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConfLNs.java new file mode 100644 index 0000000..4a988ad --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConfLNs.java @@ -0,0 +1,100 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tConfLNs complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tConfLNs">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="fixPrefix" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="fixLnInst" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectedAP.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectedAP.java new file mode 100644 index 0000000..e79405c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectedAP.java @@ -0,0 +1,287 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tConnectedAP complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tConnectedAP">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Address" type="{http://www.iec.ch/61850/2003/SCL}tAddress" minOccurs="0"/>
    + *         <element name="GSE" type="{http://www.iec.ch/61850/2003/SCL}tGSE" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="SMV" type="{http://www.iec.ch/61850/2003/SCL}tSMV" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="PhysConn" type="{http://www.iec.ch/61850/2003/SCL}tPhysConn" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="iedName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tIEDName" />
    + *       <attribute name="apName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *       <attribute name="redProt" type="{http://www.iec.ch/61850/2003/SCL}tRedProtEnum" />
    + *       <attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 gse; + @XmlElement(name = "SMV") + protected List smv; + @XmlElement(name = "PhysConn") + protected List 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. + * + *

    + * 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 set method for the gse property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGSE().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGSE } + * + * + */ + public List getGSE() { + if (gse == null) { + gse = new ArrayList(); + } + return this.gse; + } + + /** + * Gets the value of the smv property. + * + *

    + * 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 set method for the smv property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSMV().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSMV } + * + * + */ + public List getSMV() { + if (smv == null) { + smv = new ArrayList(); + } + return this.smv; + } + + /** + * Gets the value of the physConn property. + * + *

    + * 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 set method for the physConn property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getPhysConn().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TPhysConn } + * + * + */ + public List getPhysConn() { + if (physConn == null) { + physConn = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectivityNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectivityNode.java new file mode 100644 index 0000000..bb7b3f2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TConnectivityNode.java @@ -0,0 +1,71 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tConnectivityNode complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tConnectivityNode">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tLNodeContainer">
    + *       <attribute name="pathName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tConnectivityNodeReference" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControl.java new file mode 100644 index 0000000..23a5e8b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControl.java @@ -0,0 +1,157 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCBName" />
    + *       <attribute name="datSet" type="{http://www.iec.ch/61850/2003/SCL}tDataSetName" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlBlock.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlBlock.java new file mode 100644 index 0000000..fc8d4cf --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlBlock.java @@ -0,0 +1,164 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tControlBlock complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tControlBlock">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Address" type="{http://www.iec.ch/61850/2003/SCL}tAddress" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="ldInst" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *       <attribute name="cbName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCBName" />
    + *       <attribute name="cbUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithIEDName.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithIEDName.java new file mode 100644 index 0000000..b51f584 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithIEDName.java @@ -0,0 +1,411 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tControlWithIEDName complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tControlWithIEDName">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControl">
    + *       <sequence>
    + *         <element name="IEDName" maxOccurs="unbounded" minOccurs="0">
    + *           <complexType>
    + *             <simpleContent>
    + *               <extension base="<http://www.iec.ch/61850/2003/SCL>tIEDName">
    + *                 <attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *                 <attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *                 <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" />
    + *                 <attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *                 <attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    + *                 <attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *                 <attribute name="ldUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *                 <attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *               </extension>
    + *             </simpleContent>
    + *           </complexType>
    + *         </element>
    + *       </sequence>
    + *       <attribute name="confRev" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tControlWithIEDName", propOrder = { + "iedName" +}) +@XmlSeeAlso({ + TGSEControl.class, + TSampledValueControl.class +}) +public class TControlWithIEDName + extends TControl +{ + + @XmlElement(name = "IEDName") + protected List iedName; + @XmlAttribute(name = "confRev") + @XmlSchemaType(name = "unsignedInt") + protected Long confRev; + + /** + * Gets the value of the iedName property. + * + *

    + * 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 set method for the iedName property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getIEDName().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TControlWithIEDName.IEDName } + * + * + */ + public List getIEDName() { + if (iedName == null) { + iedName = new ArrayList(); + } + 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; + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <simpleContent>
    +     *     <extension base="<http://www.iec.ch/61850/2003/SCL>tIEDName">
    +     *       <attribute name="apRef" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    +     *       <attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    +     *       <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" />
    +     *       <attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    +     *       <attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    +     *       <attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    +     *       <attribute name="ldUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    +     *       <attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    +     *     </extension>
    +     *   </simpleContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @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 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +         *    getLnClass().add(newItem);
    +         * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + 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; + } + + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithTriggerOpt.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithTriggerOpt.java new file mode 100644 index 0000000..153cb8f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TControlWithTriggerOpt.java @@ -0,0 +1,111 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tControlWithTriggerOpt complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tControlWithTriggerOpt">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControl">
    + *       <sequence>
    + *         <element name="TrgOps" type="{http://www.iec.ch/61850/2003/SCL}tTrgOps" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="intgPd" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" default="0" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDA.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDA.java new file mode 100644 index 0000000..0c6141b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDA.java @@ -0,0 +1,198 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDA complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDA">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractDataAttribute">
    + *       <sequence>
    + *         <element name="ProtNs" type="{http://www.iec.ch/61850/2003/SCL}tProtNs" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDATrgOp"/>
    + *       <attribute name="fc" use="required" type="{http://www.iec.ch/61850/2003/SCL}tFCEnum" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDA", propOrder = { + "protNs" +}) +public class TDA + extends TAbstractDataAttribute +{ + + @XmlElement(name = "ProtNs") + protected List 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. + * + *

    + * 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 set method for the protNs property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getProtNs().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TProtNs } + * + * + */ + public List getProtNs() { + if (protNs == null) { + protNs = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAI.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAI.java new file mode 100644 index 0000000..acc41f7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAI.java @@ -0,0 +1,254 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDAI complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDAI">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Val" type="{http://www.iec.ch/61850/2003/SCL}tVal" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAttributeNameEnum" />
    + *       <attribute name="sAddr">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <maxLength value="255"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="valKind" type="{http://www.iec.ch/61850/2003/SCL}tValKindEnum" />
    + *       <attribute name="ix" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="valImport" type="{http://www.w3.org/2001/XMLSchema}boolean" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDAI", propOrder = { + "val", + "labels" +}) +public class TDAI + extends TUnNaming +{ + + @XmlElement(name = "Val") + protected List 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. + * + *

    + * 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 set method for the val property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getVal().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TVal } + * + * + */ + public List getVal() { + if (val == null) { + val = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAType.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAType.java new file mode 100644 index 0000000..30c6c12 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDAType.java @@ -0,0 +1,175 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDAType complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDAType">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tIDNaming">
    + *       <sequence>
    + *         <element name="BDA" type="{http://www.iec.ch/61850/2003/SCL}tBDA" maxOccurs="unbounded"/>
    + *         <element name="ProtNs" type="{http://www.iec.ch/61850/2003/SCL}tProtNs" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="iedType" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" default="" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDAType", propOrder = { + "bda", + "protNs", + "labels" +}) +public class TDAType + extends TIDNaming +{ + + @XmlElement(name = "BDA", required = true) + protected List bda; + @XmlElement(name = "ProtNs") + protected List protNs; + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "iedType") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String iedType; + + /** + * Gets the value of the bda property. + * + *

    + * 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 set method for the bda property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getBDA().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TBDA } + * + * + */ + public List getBDA() { + if (bda == null) { + bda = new ArrayList(); + } + return this.bda; + } + + /** + * Gets the value of the protNs property. + * + *

    + * 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 set method for the protNs property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getProtNs().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TProtNs } + * + * + */ + public List getProtNs() { + if (protNs == null) { + protNs = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDO.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDO.java new file mode 100644 index 0000000..535ec34 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDO.java @@ -0,0 +1,193 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDO complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDO">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tDataName" />
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="accessControl" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="transient" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOI.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOI.java new file mode 100644 index 0000000..024958f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOI.java @@ -0,0 +1,205 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDOI complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDOI">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <choice maxOccurs="unbounded" minOccurs="0">
    + *           <element name="SDI" type="{http://www.iec.ch/61850/2003/SCL}tSDI"/>
    + *           <element name="DAI" type="{http://www.iec.ch/61850/2003/SCL}tDAI"/>
    + *         </choice>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tDataName" />
    + *       <attribute name="ix" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="accessControl" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 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. + * + *

    + * 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 set method for the sdiOrDAI property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSDIOrDAI().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSDI } + * {@link TDAI } + * + * + */ + public List getSDIOrDAI() { + if (sdiOrDAI == null) { + sdiOrDAI = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDORef.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDORef.java new file mode 100644 index 0000000..d93e136 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDORef.java @@ -0,0 +1,395 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDORef complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDORef">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDesc"/>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="iedName" type="{http://www.iec.ch/61850/2003/SCL}tIEDNameOrRelative" />
    + *       <attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *       <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" />
    + *       <attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    + *       <attribute name="doName" type="{http://www.iec.ch/61850/2003/SCL}tFullDOName" />
    + *       <attribute name="pLN" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <attribute name="pDO" type="{http://www.iec.ch/61850/2003/SCL}tFullDOName" />
    + *       <attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 lnClass; + @XmlAttribute(name = "lnInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String lnInst; + @XmlAttribute(name = "doName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String doName; + @XmlAttribute(name = "pLN") + protected List 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + 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. + * + *

    + * 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 set method for the pln property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getPLN().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getPLN() { + if (pln == null) { + pln = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOType.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOType.java new file mode 100644 index 0000000..1a3d799 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDOType.java @@ -0,0 +1,177 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDOType complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDOType">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tIDNaming">
    + *       <sequence>
    + *         <choice maxOccurs="unbounded" minOccurs="0">
    + *           <element name="SDO" type="{http://www.iec.ch/61850/2003/SCL}tSDO"/>
    + *           <element name="DA" type="{http://www.iec.ch/61850/2003/SCL}tDA"/>
    + *         </choice>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="iedType" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" default="" />
    + *       <attribute name="cdc" use="required" type="{http://www.iec.ch/61850/2003/SCL}tCDCEnum" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@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 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. + * + *

    + * 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 set method for the sdoOrDA property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSDOOrDA().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSDO } + * {@link TDA } + * + * + */ + public List getSDOOrDA() { + if (sdoOrDA == null) { + sdoOrDA = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataSet.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataSet.java new file mode 100644 index 0000000..8b4c936 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataSet.java @@ -0,0 +1,163 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDataSet complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDataSet">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <choice maxOccurs="unbounded">
    + *         <element name="FCDA" type="{http://www.iec.ch/61850/2003/SCL}tFCDA"/>
    + *       </choice>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tDataSetName" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDataSet", propOrder = { + "fcda" +}) +public class TDataSet + extends TUnNaming +{ + + @XmlElement(name = "FCDA") + protected List 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. + * + *

    + * 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 set method for the fcda property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getFCDA().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TFCDA } + * + * + */ + public List getFCDA() { + if (fcda == null) { + fcda = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataTypeTemplates.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataTypeTemplates.java new file mode 100644 index 0000000..8d8b53d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDataTypeTemplates.java @@ -0,0 +1,175 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDataTypeTemplates complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDataTypeTemplates">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <sequence>
    + *         <element name="LNodeType" type="{http://www.iec.ch/61850/2003/SCL}tLNodeType" maxOccurs="unbounded"/>
    + *         <element name="DOType" type="{http://www.iec.ch/61850/2003/SCL}tDOType" maxOccurs="unbounded"/>
    + *         <element name="DAType" type="{http://www.iec.ch/61850/2003/SCL}tDAType" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="EnumType" type="{http://www.iec.ch/61850/2003/SCL}tEnumType" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDataTypeTemplates", propOrder = { + "lNodeType", + "doType", + "daType", + "enumType" +}) +public class TDataTypeTemplates { + + @XmlElement(name = "LNodeType", required = true) + protected List lNodeType; + @XmlElement(name = "DOType", required = true) + protected List doType; + @XmlElement(name = "DAType") + protected List daType; + @XmlElement(name = "EnumType") + protected List enumType; + + /** + * Gets the value of the lNodeType property. + * + *

    + * 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 set method for the lNodeType property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLNodeType().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLNodeType } + * + * + */ + public List getLNodeType() { + if (lNodeType == null) { + lNodeType = new ArrayList(); + } + return this.lNodeType; + } + + /** + * Gets the value of the doType property. + * + *

    + * 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 set method for the doType property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getDOType().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TDOType } + * + * + */ + public List getDOType() { + if (doType == null) { + doType = new ArrayList(); + } + return this.doType; + } + + /** + * Gets the value of the daType property. + * + *

    + * 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 set method for the daType property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getDAType().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TDAType } + * + * + */ + public List getDAType() { + if (daType == null) { + daType = new ArrayList(); + } + return this.daType; + } + + /** + * Gets the value of the enumType property. + * + *

    + * 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 set method for the enumType property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEnumType().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEnumType } + * + * + */ + public List getEnumType() { + if (enumType == null) { + enumType = new ArrayList(); + } + return this.enumType; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupAEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupAEnum.java new file mode 100644 index 0000000..417663e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupAEnum.java @@ -0,0 +1,53 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupAEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupAEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="A[A-Z]*"/>
    + *     <enumeration value="ANCR"/>
    + *     <enumeration value="ARCO"/>
    + *     <enumeration value="ARIS"/>
    + *     <enumeration value="ATCC"/>
    + *     <enumeration value="AVCO"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupCEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupCEnum.java new file mode 100644 index 0000000..bf6b5b3 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupCEnum.java @@ -0,0 +1,55 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupCEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupCEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="C[A-Z]*"/>
    + *     <enumeration value="CALH"/>
    + *     <enumeration value="CCGR"/>
    + *     <enumeration value="CILO"/>
    + *     <enumeration value="CPOW"/>
    + *     <enumeration value="CSWI"/>
    + *     <enumeration value="CSYN"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupFEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupFEnum.java new file mode 100644 index 0000000..d2c64f2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupFEnum.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupFEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupFEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="F[A-Z]*"/>
    + *     <enumeration value="FCNT"/>
    + *     <enumeration value="FCSD"/>
    + *     <enumeration value="FFIL"/>
    + *     <enumeration value="FLIM"/>
    + *     <enumeration value="FPID"/>
    + *     <enumeration value="FRMP"/>
    + *     <enumeration value="FSPT"/>
    + *     <enumeration value="FXOT"/>
    + *     <enumeration value="FXUT"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupGEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupGEnum.java new file mode 100644 index 0000000..c9d0fbd --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupGEnum.java @@ -0,0 +1,51 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupGEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupGEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="G[A-Z]*"/>
    + *     <enumeration value="GAPC"/>
    + *     <enumeration value="GGIO"/>
    + *     <enumeration value="GLOG"/>
    + *     <enumeration value="GSAL"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@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); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupIEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupIEnum.java new file mode 100644 index 0000000..da62edd --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupIEnum.java @@ -0,0 +1,55 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupIEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupIEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="I[A-Z]*"/>
    + *     <enumeration value="IARC"/>
    + *     <enumeration value="IHMI"/>
    + *     <enumeration value="ISAF"/>
    + *     <enumeration value="ITCI"/>
    + *     <enumeration value="ITMI"/>
    + *     <enumeration value="ITPC"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupIEnum") +@XmlEnum +public enum TDomainLNGroupIEnum { + + IARC, + IHMI, + ISAF, + ITCI, + ITMI, + ITPC; + + public String value() { + return name(); + } + + public static TDomainLNGroupIEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupKEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupKEnum.java new file mode 100644 index 0000000..bda4ae2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupKEnum.java @@ -0,0 +1,53 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupKEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupKEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="K[A-Z]*"/>
    + *     <enumeration value="KFAN"/>
    + *     <enumeration value="KFIL"/>
    + *     <enumeration value="KPMP"/>
    + *     <enumeration value="KTNK"/>
    + *     <enumeration value="KVLV"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupKEnum") +@XmlEnum +public enum TDomainLNGroupKEnum { + + KFAN, + KFIL, + KPMP, + KTNK, + KVLV; + + public String value() { + return name(); + } + + public static TDomainLNGroupKEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupMEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupMEnum.java new file mode 100644 index 0000000..6ed6eee --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupMEnum.java @@ -0,0 +1,71 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupMEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupMEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="M[A-Z]*"/>
    + *     <enumeration value="MDIF"/>
    + *     <enumeration value="MENV"/>
    + *     <enumeration value="MFLK"/>
    + *     <enumeration value="MHAI"/>
    + *     <enumeration value="MHAN"/>
    + *     <enumeration value="MHYD"/>
    + *     <enumeration value="MMDC"/>
    + *     <enumeration value="MMET"/>
    + *     <enumeration value="MMTN"/>
    + *     <enumeration value="MMTR"/>
    + *     <enumeration value="MMXN"/>
    + *     <enumeration value="MMXU"/>
    + *     <enumeration value="MSQI"/>
    + *     <enumeration value="MSTA"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupMEnum") +@XmlEnum +public enum TDomainLNGroupMEnum { + + MDIF, + MENV, + MFLK, + MHAI, + MHAN, + MHYD, + MMDC, + MMET, + MMTN, + MMTR, + MMXN, + MMXU, + MSQI, + MSTA; + + public String value() { + return name(); + } + + public static TDomainLNGroupMEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupPEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupPEnum.java new file mode 100644 index 0000000..b7b892b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupPEnum.java @@ -0,0 +1,103 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupPEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupPEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="P[A-Z]*"/>
    + *     <enumeration value="PDIF"/>
    + *     <enumeration value="PDIR"/>
    + *     <enumeration value="PDIS"/>
    + *     <enumeration value="PDOP"/>
    + *     <enumeration value="PDUP"/>
    + *     <enumeration value="PFRC"/>
    + *     <enumeration value="PHAR"/>
    + *     <enumeration value="PHIZ"/>
    + *     <enumeration value="PIOC"/>
    + *     <enumeration value="PMRI"/>
    + *     <enumeration value="PMSS"/>
    + *     <enumeration value="POPF"/>
    + *     <enumeration value="PPAM"/>
    + *     <enumeration value="PRTR"/>
    + *     <enumeration value="PSCH"/>
    + *     <enumeration value="PSDE"/>
    + *     <enumeration value="PTEF"/>
    + *     <enumeration value="PTHF"/>
    + *     <enumeration value="PTOC"/>
    + *     <enumeration value="PTOF"/>
    + *     <enumeration value="PTOV"/>
    + *     <enumeration value="PTRC"/>
    + *     <enumeration value="PTTR"/>
    + *     <enumeration value="PTUC"/>
    + *     <enumeration value="PTUF"/>
    + *     <enumeration value="PTUV"/>
    + *     <enumeration value="PUPF"/>
    + *     <enumeration value="PVOC"/>
    + *     <enumeration value="PVPH"/>
    + *     <enumeration value="PZSU"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupPEnum") +@XmlEnum +public enum TDomainLNGroupPEnum { + + PDIF, + PDIR, + PDIS, + PDOP, + PDUP, + PFRC, + PHAR, + PHIZ, + PIOC, + PMRI, + PMSS, + POPF, + PPAM, + PRTR, + PSCH, + PSDE, + PTEF, + PTHF, + PTOC, + PTOF, + PTOV, + PTRC, + PTTR, + PTUC, + PTUF, + PTUV, + PUPF, + PVOC, + PVPH, + PZSU; + + public String value() { + return name(); + } + + public static TDomainLNGroupPEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupQEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupQEnum.java new file mode 100644 index 0000000..8d659eb --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupQEnum.java @@ -0,0 +1,55 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupQEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupQEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="Q[A-Z]*"/>
    + *     <enumeration value="QFVR"/>
    + *     <enumeration value="QITR"/>
    + *     <enumeration value="QIUB"/>
    + *     <enumeration value="QVTR"/>
    + *     <enumeration value="QVUB"/>
    + *     <enumeration value="QVVR"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupQEnum") +@XmlEnum +public enum TDomainLNGroupQEnum { + + QFVR, + QITR, + QIUB, + QVTR, + QVUB, + QVVR; + + public String value() { + return name(); + } + + public static TDomainLNGroupQEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupREnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupREnum.java new file mode 100644 index 0000000..89d850f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupREnum.java @@ -0,0 +1,65 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupREnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupREnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="R[A-Z]*"/>
    + *     <enumeration value="RADR"/>
    + *     <enumeration value="RBDR"/>
    + *     <enumeration value="RBRF"/>
    + *     <enumeration value="RDIR"/>
    + *     <enumeration value="RDRE"/>
    + *     <enumeration value="RDRS"/>
    + *     <enumeration value="RFLO"/>
    + *     <enumeration value="RMXU"/>
    + *     <enumeration value="RPSB"/>
    + *     <enumeration value="RREC"/>
    + *     <enumeration value="RSYN"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupREnum") +@XmlEnum +public enum TDomainLNGroupREnum { + + RADR, + RBDR, + RBRF, + RDIR, + RDRE, + RDRS, + RFLO, + RMXU, + RPSB, + RREC, + RSYN; + + public String value() { + return name(); + } + + public static TDomainLNGroupREnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupSEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupSEnum.java new file mode 100644 index 0000000..770fa52 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupSEnum.java @@ -0,0 +1,65 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupSEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupSEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="S[A-Z]*"/>
    + *     <enumeration value="SARC"/>
    + *     <enumeration value="SCBR"/>
    + *     <enumeration value="SIMG"/>
    + *     <enumeration value="SIML"/>
    + *     <enumeration value="SLTC"/>
    + *     <enumeration value="SOPM"/>
    + *     <enumeration value="SPDC"/>
    + *     <enumeration value="SPTR"/>
    + *     <enumeration value="SSWI"/>
    + *     <enumeration value="STMP"/>
    + *     <enumeration value="SVBR"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupSEnum") +@XmlEnum +public enum TDomainLNGroupSEnum { + + SARC, + SCBR, + SIMG, + SIML, + SLTC, + SOPM, + SPDC, + SPTR, + SSWI, + STMP, + SVBR; + + public String value() { + return name(); + } + + public static TDomainLNGroupSEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupTEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupTEnum.java new file mode 100644 index 0000000..bc6b003 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupTEnum.java @@ -0,0 +1,83 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupTEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupTEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="T[A-Z]*"/>
    + *     <enumeration value="TANG"/>
    + *     <enumeration value="TAXD"/>
    + *     <enumeration value="TCTR"/>
    + *     <enumeration value="TDST"/>
    + *     <enumeration value="TFLW"/>
    + *     <enumeration value="TFRQ"/>
    + *     <enumeration value="TGSN"/>
    + *     <enumeration value="THUM"/>
    + *     <enumeration value="TLVL"/>
    + *     <enumeration value="TMGF"/>
    + *     <enumeration value="TMVM"/>
    + *     <enumeration value="TPOS"/>
    + *     <enumeration value="TPRS"/>
    + *     <enumeration value="TRTN"/>
    + *     <enumeration value="TSND"/>
    + *     <enumeration value="TTMP"/>
    + *     <enumeration value="TTNS"/>
    + *     <enumeration value="TVBR"/>
    + *     <enumeration value="TVTR"/>
    + *     <enumeration value="TWPH"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupTEnum") +@XmlEnum +public enum TDomainLNGroupTEnum { + + TANG, + TAXD, + TCTR, + TDST, + TFLW, + TFRQ, + TGSN, + THUM, + TLVL, + TMGF, + TMVM, + TPOS, + TPRS, + TRTN, + TSND, + TTMP, + TTNS, + TVBR, + TVTR, + TWPH; + + public String value() { + return name(); + } + + public static TDomainLNGroupTEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupXEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupXEnum.java new file mode 100644 index 0000000..0379e20 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupXEnum.java @@ -0,0 +1,47 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupXEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupXEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="X[A-Z]*"/>
    + *     <enumeration value="XCBR"/>
    + *     <enumeration value="XSWI"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupXEnum") +@XmlEnum +public enum TDomainLNGroupXEnum { + + XCBR, + XSWI; + + public String value() { + return name(); + } + + public static TDomainLNGroupXEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupYEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupYEnum.java new file mode 100644 index 0000000..df1bbf9 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupYEnum.java @@ -0,0 +1,51 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupYEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupYEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="Y[A-Z]*"/>
    + *     <enumeration value="YEFN"/>
    + *     <enumeration value="YLTC"/>
    + *     <enumeration value="YPSH"/>
    + *     <enumeration value="YPTR"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupYEnum") +@XmlEnum +public enum TDomainLNGroupYEnum { + + YEFN, + YLTC, + YPSH, + YPTR; + + public String value() { + return name(); + } + + public static TDomainLNGroupYEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupZEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupZEnum.java new file mode 100644 index 0000000..c60193e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDomainLNGroupZEnum.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDomainLNGroupZEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tDomainLNGroupZEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="Z[A-Z]*"/>
    + *     <enumeration value="ZAXN"/>
    + *     <enumeration value="ZBAT"/>
    + *     <enumeration value="ZBSH"/>
    + *     <enumeration value="ZCAB"/>
    + *     <enumeration value="ZCAP"/>
    + *     <enumeration value="ZCON"/>
    + *     <enumeration value="ZGEN"/>
    + *     <enumeration value="ZGIL"/>
    + *     <enumeration value="ZLIN"/>
    + *     <enumeration value="ZMOT"/>
    + *     <enumeration value="ZREA"/>
    + *     <enumeration value="ZRES"/>
    + *     <enumeration value="ZRRC"/>
    + *     <enumeration value="ZSAR"/>
    + *     <enumeration value="ZSCR"/>
    + *     <enumeration value="ZSMC"/>
    + *     <enumeration value="ZTCF"/>
    + *     <enumeration value="ZTCR"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tDomainLNGroupZEnum") +@XmlEnum +public enum TDomainLNGroupZEnum { + + ZAXN, + ZBAT, + ZBSH, + ZCAB, + ZCAP, + ZCON, + ZGEN, + ZGIL, + ZLIN, + ZMOT, + ZREA, + ZRES, + ZRRC, + ZSAR, + ZSCR, + ZSMC, + ZTCF, + ZTCR; + + public String value() { + return name(); + } + + public static TDomainLNGroupZEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInMilliSec.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInMilliSec.java new file mode 100644 index 0000000..3cad063 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInMilliSec.java @@ -0,0 +1,137 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tDurationInMilliSec complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDurationInMilliSec">
    + *   <simpleContent>
    + *     <extension base="<http://www.w3.org/2001/XMLSchema>decimal">
    + *       <attribute name="unit" type="{http://www.w3.org/2001/XMLSchema}token" fixed="s" />
    + *       <attribute name="multiplier" type="{http://www.iec.ch/61850/2003/SCL}tUnitMultiplierEnum" fixed="m" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDurationInMilliSec", propOrder = { + "value" +}) +public class TDurationInMilliSec { + + @XmlValue + protected BigDecimal value; + @XmlAttribute(name = "unit") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlSchemaType(name = "token") + 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 "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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInSec.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInSec.java new file mode 100644 index 0000000..00308dc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TDurationInSec.java @@ -0,0 +1,41 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tDurationInSec complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tDurationInSec">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tValueWithUnit">
    + *       <attribute name="unit" use="required" type="{http://www.w3.org/2001/XMLSchema}token" fixed="s" />
    + *       <attribute name="multiplier" type="{http://www.iec.ch/61850/2003/SCL}tUnitMultiplierEnum" default="" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tDurationInSec") +public class TDurationInSec + extends TValueWithUnit +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumType.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumType.java new file mode 100644 index 0000000..ceea2ba --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumType.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tEnumType complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tEnumType">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tIDNaming">
    + *       <sequence>
    + *         <element name="EnumVal" type="{http://www.iec.ch/61850/2003/SCL}tEnumVal" maxOccurs="unbounded"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEnumType", propOrder = { + "enumVal" +}) +public class TEnumType + extends TIDNaming +{ + + @XmlElement(name = "EnumVal", required = true) + protected List enumVal; + + /** + * Gets the value of the enumVal property. + * + *

    + * 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 set method for the enumVal property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEnumVal().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEnumVal } + * + * + */ + public List getEnumVal() { + if (enumVal == null) { + enumVal = new ArrayList(); + } + return this.enumVal; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumVal.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumVal.java new file mode 100644 index 0000000..b280ed5 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEnumVal.java @@ -0,0 +1,123 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.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; + + +/** + *

    tEnumVal complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tEnumVal">
    + *   <simpleContent>
    + *     <extension base="<http://www.iec.ch/61850/2003/SCL>tEnumStringValue">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDesc"/>
    + *       <attribute name="ord" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEnumVal", propOrder = { + "value" +}) +public class TEnumVal { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String value; + @XmlAttribute(name = "ord", required = true) + protected int ord; + @XmlAttribute(name = "desc") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String desc; + + /** + * 获取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; + } + + /** + * 获取ord属性的值。 + * + */ + public int getOrd() { + return ord; + } + + /** + * 设置ord属性的值。 + * + */ + public void setOrd(int value) { + this.ord = 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqFunction.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqFunction.java new file mode 100644 index 0000000..8c16a09 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqFunction.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tEqFunction complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tEqFunction">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractEqFuncSubFunc">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEqFunction") +public class TEqFunction + extends TAbstractEqFuncSubFunc +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqSubFunction.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqSubFunction.java new file mode 100644 index 0000000..9ee25e6 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEqSubFunction.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tEqSubFunction complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tEqSubFunction">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractEqFuncSubFunc">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEqSubFunction") +public class TEqSubFunction + extends TAbstractEqFuncSubFunc +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipment.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipment.java new file mode 100644 index 0000000..21a60e7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipment.java @@ -0,0 +1,78 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tEquipment complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tEquipment">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agVirtual"/>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEquipment") +@XmlSeeAlso({ + TPowerTransformer.class, + TAbstractConductingEquipment.class, + TGeneralEquipment.class +}) +public abstract class TEquipment + extends TPowerSystemResource +{ + + @XmlAttribute(name = "virtual") + protected Boolean virtual; + + /** + * 获取virtual属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isVirtual() { + if (virtual == null) { + return false; + } else { + return virtual; + } + } + + /** + * 设置virtual属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setVirtual(Boolean value) { + this.virtual = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipmentContainer.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipmentContainer.java new file mode 100644 index 0000000..976f66d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TEquipmentContainer.java @@ -0,0 +1,118 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tEquipmentContainer complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tEquipmentContainer">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="PowerTransformer" type="{http://www.iec.ch/61850/2003/SCL}tPowerTransformer" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="GeneralEquipment" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tEquipmentContainer", propOrder = { + "powerTransformer", + "generalEquipment" +}) +@XmlSeeAlso({ + TSubstation.class, + TVoltageLevel.class, + TBay.class +}) +public abstract class TEquipmentContainer + extends TPowerSystemResource +{ + + @XmlElement(name = "PowerTransformer") + protected List powerTransformer; + @XmlElement(name = "GeneralEquipment") + protected List generalEquipment; + + /** + * Gets the value of the powerTransformer property. + * + *

    + * 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 set method for the powerTransformer property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getPowerTransformer().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TPowerTransformer } + * + * + */ + public List getPowerTransformer() { + if (powerTransformer == null) { + powerTransformer = new ArrayList(); + } + return this.powerTransformer; + } + + /** + * Gets the value of the generalEquipment property. + * + *

    + * 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 set method for the generalEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGeneralEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGeneralEquipment } + * + * + */ + public List getGeneralEquipment() { + if (generalEquipment == null) { + generalEquipment = new ArrayList(); + } + return this.generalEquipment; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtControlCheck.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtControlCheck.java new file mode 100644 index 0000000..845e284 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtControlCheck.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tExtControlCheck的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tExtControlCheck">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *     <enumeration value="true"/>
    + *     <enumeration value="false"/>
    + *     <enumeration value="conserve"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tExtControlCheck") +@XmlEnum +public enum TExtControlCheck { + + @XmlEnumValue("true") + TRUE("true"), + @XmlEnumValue("false") + FALSE("false"), + @XmlEnumValue("conserve") + CONSERVE("conserve"); + private final String value; + + TExtControlCheck(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TExtControlCheck fromValue(String v) { + for (TExtControlCheck c: TExtControlCheck.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtCtrl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtCtrl.java new file mode 100644 index 0000000..9d33db5 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtCtrl.java @@ -0,0 +1,163 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tExtCtrl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tExtCtrl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tDORef">
    + *       <attribute name="apRef" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *       <attribute name="intAddr" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="checkSynchrocheck" type="{http://www.iec.ch/61850/2003/SCL}tExtControlCheck" default="true" />
    + *       <attribute name="checkInterlock" type="{http://www.iec.ch/61850/2003/SCL}tExtControlCheck" default="true" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tExtCtrl") +public class TExtCtrl + extends TDORef +{ + + @XmlAttribute(name = "apRef") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String apRef; + @XmlAttribute(name = "intAddr") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String intAddr; + @XmlAttribute(name = "checkSynchrocheck") + protected TExtControlCheck checkSynchrocheck; + @XmlAttribute(name = "checkInterlock") + protected TExtControlCheck checkInterlock; + + /** + * 获取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; + } + + /** + * 获取intAddr属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getIntAddr() { + return intAddr; + } + + /** + * 设置intAddr属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setIntAddr(String value) { + this.intAddr = value; + } + + /** + * 获取checkSynchrocheck属性的值。 + * + * @return + * possible object is + * {@link TExtControlCheck } + * + */ + public TExtControlCheck getCheckSynchrocheck() { + if (checkSynchrocheck == null) { + return TExtControlCheck.TRUE; + } else { + return checkSynchrocheck; + } + } + + /** + * 设置checkSynchrocheck属性的值。 + * + * @param value + * allowed object is + * {@link TExtControlCheck } + * + */ + public void setCheckSynchrocheck(TExtControlCheck value) { + this.checkSynchrocheck = value; + } + + /** + * 获取checkInterlock属性的值。 + * + * @return + * possible object is + * {@link TExtControlCheck } + * + */ + public TExtControlCheck getCheckInterlock() { + if (checkInterlock == null) { + return TExtControlCheck.TRUE; + } else { + return checkInterlock; + } + } + + /** + * 设置checkInterlock属性的值。 + * + * @param value + * allowed object is + * {@link TExtControlCheck } + * + */ + public void setCheckInterlock(TExtControlCheck value) { + this.checkInterlock = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtRef.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtRef.java new file mode 100644 index 0000000..a91c10f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TExtRef.java @@ -0,0 +1,357 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tExtRef complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tExtRef">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tDORef">
    + *       <attribute name="daName" type="{http://www.iec.ch/61850/2003/SCL}tFullAttributeName" />
    + *       <attribute name="intAddr" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="serviceType" type="{http://www.iec.ch/61850/2003/SCL}tServiceType" />
    + *       <attribute name="srcLDInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *       <attribute name="srcPrefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" />
    + *       <attribute name="srcLNClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <attribute name="srcLNInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    + *       <attribute name="srcCBName" type="{http://www.iec.ch/61850/2003/SCL}tCBName" />
    + *       <attribute name="pServT" type="{http://www.iec.ch/61850/2003/SCL}tServiceType" />
    + *       <attribute name="pDA" type="{http://www.iec.ch/61850/2003/SCL}tFullAttributeName" />
    + *       <attribute name="srcCBUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tExtRef") +public class TExtRef + extends TDORef +{ + + @XmlAttribute(name = "daName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String daName; + @XmlAttribute(name = "intAddr") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String intAddr; + @XmlAttribute(name = "serviceType") + protected TServiceType serviceType; + @XmlAttribute(name = "srcLDInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String srcLDInst; + @XmlAttribute(name = "srcPrefix") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String srcPrefix; + @XmlAttribute(name = "srcLNClass") + protected List srcLNClass; + @XmlAttribute(name = "srcLNInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String srcLNInst; + @XmlAttribute(name = "srcCBName") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String srcCBName; + @XmlAttribute(name = "pServT") + protected TServiceType pServT; + @XmlAttribute(name = "pDA") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String pda; + @XmlAttribute(name = "srcCBUuid") + protected String srcCBUuid; + + /** + * 获取daName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getDaName() { + return daName; + } + + /** + * 设置daName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDaName(String value) { + this.daName = value; + } + + /** + * 获取intAddr属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getIntAddr() { + return intAddr; + } + + /** + * 设置intAddr属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setIntAddr(String value) { + this.intAddr = value; + } + + /** + * 获取serviceType属性的值。 + * + * @return + * possible object is + * {@link TServiceType } + * + */ + public TServiceType getServiceType() { + return serviceType; + } + + /** + * 设置serviceType属性的值。 + * + * @param value + * allowed object is + * {@link TServiceType } + * + */ + public void setServiceType(TServiceType value) { + this.serviceType = value; + } + + /** + * 获取srcLDInst属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSrcLDInst() { + return srcLDInst; + } + + /** + * 设置srcLDInst属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSrcLDInst(String value) { + this.srcLDInst = value; + } + + /** + * 获取srcPrefix属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSrcPrefix() { + return srcPrefix; + } + + /** + * 设置srcPrefix属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSrcPrefix(String value) { + this.srcPrefix = value; + } + + /** + * Gets the value of the srcLNClass property. + * + *

    + * 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 set method for the srcLNClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSrcLNClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getSrcLNClass() { + if (srcLNClass == null) { + srcLNClass = new ArrayList(); + } + return this.srcLNClass; + } + + /** + * 获取srcLNInst属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSrcLNInst() { + return srcLNInst; + } + + /** + * 设置srcLNInst属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSrcLNInst(String value) { + this.srcLNInst = value; + } + + /** + * 获取srcCBName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSrcCBName() { + return srcCBName; + } + + /** + * 设置srcCBName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSrcCBName(String value) { + this.srcCBName = value; + } + + /** + * 获取pServT属性的值。 + * + * @return + * possible object is + * {@link TServiceType } + * + */ + public TServiceType getPServT() { + return pServT; + } + + /** + * 设置pServT属性的值。 + * + * @param value + * allowed object is + * {@link TServiceType } + * + */ + public void setPServT(TServiceType value) { + this.pServT = value; + } + + /** + * 获取pda属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getPDA() { + return pda; + } + + /** + * 设置pda属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPDA(String value) { + this.pda = value; + } + + /** + * 获取srcCBUuid属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSrcCBUuid() { + return srcCBUuid; + } + + /** + * 设置srcCBUuid属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSrcCBUuid(String value) { + this.srcCBUuid = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFCDA.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFCDA.java new file mode 100644 index 0000000..04ea5ea --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFCDA.java @@ -0,0 +1,301 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tFCDA complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tFCDA">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *       <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" default="" />
    + *       <attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    + *       <attribute name="doName" type="{http://www.iec.ch/61850/2003/SCL}tFullDOName" />
    + *       <attribute name="daName" type="{http://www.iec.ch/61850/2003/SCL}tFullAttributeName" />
    + *       <attribute name="fc" use="required" type="{http://www.iec.ch/61850/2003/SCL}tFCEnum" />
    + *       <attribute name="ix" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tFCDA") +public class TFCDA { + + @XmlAttribute(name = "ldInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String ldInst; + @XmlAttribute(name = "prefix") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String prefix; + @XmlAttribute(name = "lnClass") + protected List lnClass; + @XmlAttribute(name = "lnInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String lnInst; + @XmlAttribute(name = "doName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String doName; + @XmlAttribute(name = "daName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String daName; + @XmlAttribute(name = "fc", required = true) + protected String fc; + @XmlAttribute(name = "ix") + @XmlSchemaType(name = "unsignedInt") + protected Long ix; + @XmlAttribute(name = "lnUuid") + protected String lnUuid; + + /** + * 获取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() { + 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + 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; + } + + /** + * 获取daName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getDaName() { + return daName; + } + + /** + * 设置daName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDaName(String value) { + this.daName = value; + } + + /** + * 获取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; + } + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFileHandling.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFileHandling.java new file mode 100644 index 0000000..e19b05f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFileHandling.java @@ -0,0 +1,133 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tFileHandling complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tFileHandling">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    + *       <attribute name="mms" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="ftp" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="ftps" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tFileHandling") +public class TFileHandling + extends TServiceYesNo +{ + + @XmlAttribute(name = "mms") + protected Boolean mms; + @XmlAttribute(name = "ftp") + protected Boolean ftp; + @XmlAttribute(name = "ftps") + protected Boolean ftps; + + /** + * 获取mms属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isMms() { + if (mms == null) { + return true; + } else { + return mms; + } + } + + /** + * 设置mms属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setMms(Boolean value) { + this.mms = value; + } + + /** + * 获取ftp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFtp() { + if (ftp == null) { + return false; + } else { + return ftp; + } + } + + /** + * 设置ftp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFtp(Boolean value) { + this.ftp = value; + } + + /** + * 获取ftps属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFtps() { + if (ftps == null) { + return false; + } else { + return ftps; + } + } + + /** + * 设置ftps属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFtps(Boolean value) { + this.ftps = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFunction.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFunction.java new file mode 100644 index 0000000..a4fc14e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TFunction.java @@ -0,0 +1,178 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tFunction complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tFunction">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="SubFunction" type="{http://www.iec.ch/61850/2003/SCL}tSubFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="GeneralEquipment" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="ConductingEquipment" type="{http://www.iec.ch/61850/2003/SCL}tConductingEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tFunction", propOrder = { + "subFunction", + "generalEquipment", + "conductingEquipment" +}) +public class TFunction + extends TPowerSystemResource +{ + + @XmlElement(name = "SubFunction") + protected List subFunction; + @XmlElement(name = "GeneralEquipment") + protected List generalEquipment; + @XmlElement(name = "ConductingEquipment") + protected List conductingEquipment; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String type; + + /** + * Gets the value of the subFunction property. + * + *

    + * 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 set method for the subFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubFunction } + * + * + */ + public List getSubFunction() { + if (subFunction == null) { + subFunction = new ArrayList(); + } + return this.subFunction; + } + + /** + * Gets the value of the generalEquipment property. + * + *

    + * 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 set method for the generalEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGeneralEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGeneralEquipment } + * + * + */ + public List getGeneralEquipment() { + if (generalEquipment == null) { + generalEquipment = new ArrayList(); + } + return this.generalEquipment; + } + + /** + * Gets the value of the conductingEquipment property. + * + *

    + * 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 set method for the conductingEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConductingEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConductingEquipment } + * + * + */ + public List getConductingEquipment() { + if (conductingEquipment == null) { + conductingEquipment = new ArrayList(); + } + return this.conductingEquipment; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGOOSEcapabilities.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGOOSEcapabilities.java new file mode 100644 index 0000000..4fc7a59 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGOOSEcapabilities.java @@ -0,0 +1,133 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tGOOSEcapabilities complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tGOOSEcapabilities">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceWithMax">
    + *       <attribute name="fixedOffs" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="goose" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="rGOOSE" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tGOOSEcapabilities") +public class TGOOSEcapabilities + extends TServiceWithMax +{ + + @XmlAttribute(name = "fixedOffs") + protected Boolean fixedOffs; + @XmlAttribute(name = "goose") + protected Boolean goose; + @XmlAttribute(name = "rGOOSE") + protected Boolean rgoose; + + /** + * 获取fixedOffs属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFixedOffs() { + if (fixedOffs == null) { + return false; + } else { + return fixedOffs; + } + } + + /** + * 设置fixedOffs属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFixedOffs(Boolean value) { + this.fixedOffs = value; + } + + /** + * 获取goose属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isGoose() { + if (goose == null) { + return true; + } else { + return goose; + } + } + + /** + * 设置goose属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setGoose(Boolean value) { + this.goose = 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSE.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSE.java new file mode 100644 index 0000000..4d7bda0 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSE.java @@ -0,0 +1,100 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tGSE complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tGSE">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControlBlock">
    + *       <sequence>
    + *         <element name="MinTime" type="{http://www.iec.ch/61850/2003/SCL}tDurationInMilliSec" minOccurs="0"/>
    + *         <element name="MaxTime" type="{http://www.iec.ch/61850/2003/SCL}tDurationInMilliSec" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tGSE", propOrder = { + "minTime", + "maxTime" +}) +public class TGSE + extends TControlBlock +{ + + @XmlElement(name = "MinTime") + protected TDurationInMilliSec minTime; + @XmlElement(name = "MaxTime") + protected TDurationInMilliSec maxTime; + + /** + * 获取minTime属性的值。 + * + * @return + * possible object is + * {@link TDurationInMilliSec } + * + */ + public TDurationInMilliSec getMinTime() { + return minTime; + } + + /** + * 设置minTime属性的值。 + * + * @param value + * allowed object is + * {@link TDurationInMilliSec } + * + */ + public void setMinTime(TDurationInMilliSec value) { + this.minTime = value; + } + + /** + * 获取maxTime属性的值。 + * + * @return + * possible object is + * {@link TDurationInMilliSec } + * + */ + public TDurationInMilliSec getMaxTime() { + return maxTime; + } + + /** + * 设置maxTime属性的值。 + * + * @param value + * allowed object is + * {@link TDurationInMilliSec } + * + */ + public void setMaxTime(TDurationInMilliSec value) { + this.maxTime = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControl.java new file mode 100644 index 0000000..5d37b6c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControl.java @@ -0,0 +1,196 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tGSEControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tGSEControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControlWithIEDName">
    + *       <sequence>
    + *         <element name="Protocol" type="{http://www.iec.ch/61850/2003/SCL}tProtocol" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.iec.ch/61850/2003/SCL}tGSEControlTypeEnum" default="GOOSE" />
    + *       <attribute name="appID" use="required" type="{http://www.iec.ch/61850/2003/SCL}tMessageID" />
    + *       <attribute name="fixedOffs" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="securityEnable" type="{http://www.iec.ch/61850/2003/SCL}tPredefinedTypeOfSecurityEnum" default="None" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tGSEControl", propOrder = { + "protocol" +}) +public class TGSEControl + extends TControlWithIEDName +{ + + @XmlElement(name = "Protocol") + protected TProtocol protocol; + @XmlAttribute(name = "type") + protected TGSEControlTypeEnum type; + @XmlAttribute(name = "appID", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String appID; + @XmlAttribute(name = "fixedOffs") + protected Boolean fixedOffs; + @XmlAttribute(name = "securityEnable") + protected TPredefinedTypeOfSecurityEnum securityEnable; + + /** + * 获取protocol属性的值。 + * + * @return + * possible object is + * {@link TProtocol } + * + */ + public TProtocol getProtocol() { + return protocol; + } + + /** + * 设置protocol属性的值。 + * + * @param value + * allowed object is + * {@link TProtocol } + * + */ + public void setProtocol(TProtocol value) { + this.protocol = value; + } + + /** + * 获取type属性的值。 + * + * @return + * possible object is + * {@link TGSEControlTypeEnum } + * + */ + public TGSEControlTypeEnum getType() { + if (type == null) { + return TGSEControlTypeEnum.GOOSE; + } else { + return type; + } + } + + /** + * 设置type属性的值。 + * + * @param value + * allowed object is + * {@link TGSEControlTypeEnum } + * + */ + public void setType(TGSEControlTypeEnum value) { + this.type = value; + } + + /** + * 获取appID属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getAppID() { + return appID; + } + + /** + * 设置appID属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setAppID(String value) { + this.appID = value; + } + + /** + * 获取fixedOffs属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isFixedOffs() { + if (fixedOffs == null) { + return false; + } else { + return fixedOffs; + } + } + + /** + * 设置fixedOffs属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setFixedOffs(Boolean value) { + this.fixedOffs = value; + } + + /** + * 获取securityEnable属性的值。 + * + * @return + * possible object is + * {@link TPredefinedTypeOfSecurityEnum } + * + */ + public TPredefinedTypeOfSecurityEnum getSecurityEnable() { + if (securityEnable == null) { + return TPredefinedTypeOfSecurityEnum.NONE; + } else { + return securityEnable; + } + } + + /** + * 设置securityEnable属性的值。 + * + * @param value + * allowed object is + * {@link TPredefinedTypeOfSecurityEnum } + * + */ + public void setSecurityEnable(TPredefinedTypeOfSecurityEnum value) { + this.securityEnable = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControlTypeEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControlTypeEnum.java new file mode 100644 index 0000000..f2651d0 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSEControlTypeEnum.java @@ -0,0 +1,45 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tGSEControlTypeEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tGSEControlTypeEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="GSSE"/>
    + *     <enumeration value="GOOSE"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tGSEControlTypeEnum") +@XmlEnum +public enum TGSEControlTypeEnum { + + GSSE, + GOOSE; + + public String value() { + return name(); + } + + public static TGSEControlTypeEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSESettings.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSESettings.java new file mode 100644 index 0000000..c451ff6 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGSESettings.java @@ -0,0 +1,165 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tGSESettings complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tGSESettings">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceSettings">
    + *       <sequence>
    + *         <element name="McSecurity" type="{http://www.iec.ch/61850/2003/SCL}tMcSecurity" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="appID" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="dataLabel" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="kdaParticipant" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tGSESettings", propOrder = { + "mcSecurity" +}) +public class TGSESettings + extends TServiceSettings +{ + + @XmlElement(name = "McSecurity") + protected TMcSecurity mcSecurity; + @XmlAttribute(name = "appID") + protected TServiceSettingsEnum appID; + @XmlAttribute(name = "dataLabel") + protected TServiceSettingsEnum dataLabel; + @XmlAttribute(name = "kdaParticipant") + protected Boolean kdaParticipant; + + /** + * 获取mcSecurity属性的值。 + * + * @return + * possible object is + * {@link TMcSecurity } + * + */ + public TMcSecurity getMcSecurity() { + return mcSecurity; + } + + /** + * 设置mcSecurity属性的值。 + * + * @param value + * allowed object is + * {@link TMcSecurity } + * + */ + public void setMcSecurity(TMcSecurity value) { + this.mcSecurity = value; + } + + /** + * 获取appID属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getAppID() { + if (appID == null) { + return TServiceSettingsEnum.FIX; + } else { + return appID; + } + } + + /** + * 设置appID属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setAppID(TServiceSettingsEnum value) { + this.appID = value; + } + + /** + * 获取dataLabel属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getDataLabel() { + if (dataLabel == null) { + return TServiceSettingsEnum.FIX; + } else { + return dataLabel; + } + } + + /** + * 设置dataLabel属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setDataLabel(TServiceSettingsEnum value) { + this.dataLabel = value; + } + + /** + * 获取kdaParticipant属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isKdaParticipant() { + if (kdaParticipant == null) { + return false; + } else { + return kdaParticipant; + } + } + + /** + * 设置kdaParticipant属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setKdaParticipant(Boolean value) { + this.kdaParticipant = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipment.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipment.java new file mode 100644 index 0000000..f127578 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipment.java @@ -0,0 +1,107 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tGeneralEquipment complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tGeneralEquipment">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tEquipment">
    + *       <sequence>
    + *         <element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipmentEnum" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tGeneralEquipment", propOrder = { + "eqFunction" +}) +public class TGeneralEquipment + extends TEquipment +{ + + @XmlElement(name = "EqFunction") + protected List eqFunction; + @XmlAttribute(name = "type", required = true) + protected String type; + + /** + * Gets the value of the eqFunction property. + * + *

    + * 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 set method for the eqFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqFunction } + * + * + */ + public List getEqFunction() { + if (eqFunction == null) { + eqFunction = new ArrayList(); + } + 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipmentContainer.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipmentContainer.java new file mode 100644 index 0000000..38dead1 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TGeneralEquipmentContainer.java @@ -0,0 +1,117 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tGeneralEquipmentContainer complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tGeneralEquipmentContainer">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="GeneralEquipment" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Function" type="{http://www.iec.ch/61850/2003/SCL}tFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tGeneralEquipmentContainer", propOrder = { + "generalEquipment", + "function" +}) +@XmlSeeAlso({ + TProcess.class, + TLine.class +}) +public abstract class TGeneralEquipmentContainer + extends TPowerSystemResource +{ + + @XmlElement(name = "GeneralEquipment") + protected List generalEquipment; + @XmlElement(name = "Function") + protected List function; + + /** + * Gets the value of the generalEquipment property. + * + *

    + * 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 set method for the generalEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGeneralEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGeneralEquipment } + * + * + */ + public List getGeneralEquipment() { + if (generalEquipment == null) { + generalEquipment = new ArrayList(); + } + return this.generalEquipment; + } + + /** + * Gets the value of the function property. + * + *

    + * 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 set method for the function property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TFunction } + * + * + */ + public List getFunction() { + if (function == null) { + function = new ArrayList(); + } + return this.function; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeader.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeader.java new file mode 100644 index 0000000..17c10d2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeader.java @@ -0,0 +1,441 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tHeader complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tHeader">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <sequence>
    + *         <element name="Text" type="{http://www.iec.ch/61850/2003/SCL}tText" minOccurs="0"/>
    + *         <element name="History" minOccurs="0">
    + *           <complexType>
    + *             <complexContent>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *                 <sequence>
    + *                   <element name="Hitem" type="{http://www.iec.ch/61850/2003/SCL}tHitem" maxOccurs="unbounded"/>
    + *                 </sequence>
    + *               </restriction>
    + *             </complexContent>
    + *           </complexType>
    + *         </element>
    + *         <element name="SourceFiles" type="{http://www.iec.ch/61850/2003/SCL}tHeaderSclRef" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="id" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="version" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="revision" type="{http://www.w3.org/2001/XMLSchema}normalizedString" default="" />
    + *       <attribute name="toolID" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="nameStructure" default="IEDName">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *             <enumeration value="IEDName"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="fileType" type="{http://www.iec.ch/61850/2003/SCL}tSCLFileType" />
    + *       <attribute name="uuid" use="required" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <attribute name="baseUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tHeader", propOrder = { + "text", + "history", + "sourceFiles" +}) +public class THeader { + + @XmlElement(name = "Text") + protected TText text; + @XmlElement(name = "History") + protected THeader.History history; + @XmlElement(name = "SourceFiles") + protected THeaderSclRef sourceFiles; + @XmlAttribute(name = "id", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String id; + @XmlAttribute(name = "version") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String version; + @XmlAttribute(name = "revision") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String revision; + @XmlAttribute(name = "toolID") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String toolID; + @XmlAttribute(name = "nameStructure") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String nameStructure; + @XmlAttribute(name = "fileType") + protected String fileType; + @XmlAttribute(name = "uuid", required = true) + protected String uuid; + @XmlAttribute(name = "baseUuid") + protected String baseUuid; + + /** + * 获取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; + } + + /** + * 获取history属性的值。 + * + * @return + * possible object is + * {@link THeader.History } + * + */ + public THeader.History getHistory() { + return history; + } + + /** + * 设置history属性的值。 + * + * @param value + * allowed object is + * {@link THeader.History } + * + */ + public void setHistory(THeader.History value) { + this.history = value; + } + + /** + * 获取sourceFiles属性的值。 + * + * @return + * possible object is + * {@link THeaderSclRef } + * + */ + public THeaderSclRef getSourceFiles() { + return sourceFiles; + } + + /** + * 设置sourceFiles属性的值。 + * + * @param value + * allowed object is + * {@link THeaderSclRef } + * + */ + public void setSourceFiles(THeaderSclRef value) { + this.sourceFiles = value; + } + + /** + * 获取id属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * 设置id属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + + /** + * 获取version属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + 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 ""; + } else { + return revision; + } + } + + /** + * 设置revision属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRevision(String value) { + this.revision = value; + } + + /** + * 获取toolID属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getToolID() { + return toolID; + } + + /** + * 设置toolID属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setToolID(String value) { + this.toolID = value; + } + + /** + * 获取nameStructure属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getNameStructure() { + if (nameStructure == null) { + return "IEDName"; + } else { + return nameStructure; + } + } + + /** + * 设置nameStructure属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNameStructure(String value) { + this.nameStructure = value; + } + + /** + * 获取fileType属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getFileType() { + return fileType; + } + + /** + * 设置fileType属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFileType(String value) { + this.fileType = 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; + } + + /** + * 获取baseUuid属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getBaseUuid() { + return baseUuid; + } + + /** + * 设置baseUuid属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setBaseUuid(String value) { + this.baseUuid = value; + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <complexContent>
    +     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    +     *       <sequence>
    +     *         <element name="Hitem" type="{http://www.iec.ch/61850/2003/SCL}tHitem" maxOccurs="unbounded"/>
    +     *       </sequence>
    +     *     </restriction>
    +     *   </complexContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "hitem" + }) + public static class History { + + @XmlElement(name = "Hitem", required = true) + protected List hitem; + + /** + * Gets the value of the hitem property. + * + *

    + * 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 set method for the hitem property. + * + *

    + * For example, to add a new item, do as follows: + *

    +         *    getHitem().add(newItem);
    +         * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link THitem } + * + * + */ + public List getHitem() { + if (hitem == null) { + hitem = new ArrayList(); + } + return this.hitem; + } + + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeaderSclRef.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeaderSclRef.java new file mode 100644 index 0000000..edefa58 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THeaderSclRef.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tHeaderSclRef complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tHeaderSclRef">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <sequence>
    + *         <element name="SclFileReference" type="{http://www.iec.ch/61850/2003/SCL}tSclFileUUIDReference" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tHeaderSclRef", propOrder = { + "sclFileReference" +}) +public class THeaderSclRef + extends TBaseElement +{ + + @XmlElement(name = "SclFileReference") + protected List sclFileReference; + + /** + * Gets the value of the sclFileReference property. + * + *

    + * 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 set method for the sclFileReference property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSclFileReference().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSclFileUUIDReference } + * + * + */ + public List getSclFileReference() { + if (sclFileReference == null) { + sclFileReference = new ArrayList(); + } + return this.sclFileReference; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THitem.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THitem.java new file mode 100644 index 0000000..badeb60 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/THitem.java @@ -0,0 +1,221 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tHitem complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tHitem">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAnyContentFromOtherNamespace">
    + *       <sequence>
    + *         <element name="SourceFiles" type="{http://www.iec.ch/61850/2003/SCL}tHeaderSclRef" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="revision" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="when" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="who" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="what" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="why" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tHitem") +public class THitem + extends TAnyContentFromOtherNamespace +{ + + @XmlAttribute(name = "version", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String version; + @XmlAttribute(name = "revision", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String revision; + @XmlAttribute(name = "when", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String when; + @XmlAttribute(name = "who") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String who; + @XmlAttribute(name = "what") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String what; + @XmlAttribute(name = "why") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String why; + + /** + * 获取version属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + 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() { + return revision; + } + + /** + * 设置revision属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRevision(String value) { + this.revision = value; + } + + /** + * 获取when属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getWhen() { + return when; + } + + /** + * 设置when属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWhen(String value) { + this.when = value; + } + + /** + * 获取who属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getWho() { + return who; + } + + /** + * 设置who属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWho(String value) { + this.who = value; + } + + /** + * 获取what属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getWhat() { + return what; + } + + /** + * 设置what属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWhat(String value) { + this.what = value; + } + + /** + * 获取why属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getWhy() { + return why; + } + + /** + * 设置why属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWhy(String value) { + this.why = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIDNaming.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIDNaming.java new file mode 100644 index 0000000..af0819c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIDNaming.java @@ -0,0 +1,113 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +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; + + +/** + *

    tIDNaming complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tIDNaming">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDesc"/>
    + *       <attribute name="id" use="required" type="{http://www.iec.ch/61850/2003/SCL}tID" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tIDNaming") +@XmlSeeAlso({ + TLNodeType.class, + TDOType.class, + TDAType.class, + TEnumType.class +}) +public abstract class TIDNaming + extends TBaseElement +{ + + @XmlAttribute(name = "id", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String id; + @XmlAttribute(name = "desc") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String desc; + + /** + * 获取id属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * 设置id属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIED.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIED.java new file mode 100644 index 0000000..3ff1407 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIED.java @@ -0,0 +1,552 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tIED complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tIED">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Services" type="{http://www.iec.ch/61850/2003/SCL}tServices" minOccurs="0"/>
    + *         <element name="AccessPoint" type="{http://www.iec.ch/61850/2003/SCL}tAccessPoint" maxOccurs="unbounded"/>
    + *         <element name="KDC" type="{http://www.iec.ch/61850/2003/SCL}tKDC" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="IEDSourceFiles" type="{http://www.iec.ch/61850/2003/SCL}tIEDSclRef" minOccurs="0"/>
    + *         <element name="MinRequestedSCDFiles" type="{http://www.iec.ch/61850/2003/SCL}tMinRequestedSCDFiles" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tIEDName" />
    + *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="manufacturer" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="configVersion" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="originalSclVersion" type="{http://www.iec.ch/61850/2003/SCL}tSclVersion" default="2003" />
    + *       <attribute name="originalSclRevision" type="{http://www.iec.ch/61850/2003/SCL}tSclRevision" default="A" />
    + *       <attribute name="originalSclRelease" type="{http://www.iec.ch/61850/2003/SCL}tSclRelease" default="1" />
    + *       <attribute name="engRight" type="{http://www.iec.ch/61850/2003/SCL}tRightEnum" default="full" />
    + *       <attribute name="owner" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tIED", propOrder = { + "services", + "accessPoint", + "kdc", + "iedSourceFiles", + "minRequestedSCDFiles", + "labels" +}) +public class TIED + extends TUnNaming +{ + + @XmlElement(name = "Services") + protected TServices services; + @XmlElement(name = "AccessPoint", required = true) + protected List accessPoint; + @XmlElement(name = "KDC") + protected List kdc; + @XmlElement(name = "IEDSourceFiles") + protected TIEDSclRef iedSourceFiles; + @XmlElement(name = "MinRequestedSCDFiles") + protected TMinRequestedSCDFiles minRequestedSCDFiles; + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "name", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String name; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String type; + @XmlAttribute(name = "manufacturer") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String manufacturer; + @XmlAttribute(name = "configVersion") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String configVersion; + @XmlAttribute(name = "originalSclVersion") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String originalSclVersion; + @XmlAttribute(name = "originalSclRevision") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String originalSclRevision; + @XmlAttribute(name = "originalSclRelease") + protected Short originalSclRelease; + @XmlAttribute(name = "engRight") + protected TRightEnum engRight; + @XmlAttribute(name = "owner") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String owner; + @XmlAttribute(name = "uuid") + protected String uuid; + @XmlAttribute(name = "templateUuid") + protected String templateUuid; + + /** + * 获取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 accessPoint property. + * + *

    + * 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 set method for the accessPoint property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getAccessPoint().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TAccessPoint } + * + * + */ + public List getAccessPoint() { + if (accessPoint == null) { + accessPoint = new ArrayList(); + } + return this.accessPoint; + } + + /** + * Gets the value of the kdc property. + * + *

    + * 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 set method for the kdc property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getKDC().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TKDC } + * + * + */ + public List getKDC() { + if (kdc == null) { + kdc = new ArrayList(); + } + return this.kdc; + } + + /** + * 获取iedSourceFiles属性的值。 + * + * @return + * possible object is + * {@link TIEDSclRef } + * + */ + public TIEDSclRef getIEDSourceFiles() { + return iedSourceFiles; + } + + /** + * 设置iedSourceFiles属性的值。 + * + * @param value + * allowed object is + * {@link TIEDSclRef } + * + */ + public void setIEDSourceFiles(TIEDSclRef value) { + this.iedSourceFiles = value; + } + + /** + * 获取minRequestedSCDFiles属性的值。 + * + * @return + * possible object is + * {@link TMinRequestedSCDFiles } + * + */ + public TMinRequestedSCDFiles getMinRequestedSCDFiles() { + return minRequestedSCDFiles; + } + + /** + * 设置minRequestedSCDFiles属性的值。 + * + * @param value + * allowed object is + * {@link TMinRequestedSCDFiles } + * + */ + public void setMinRequestedSCDFiles(TMinRequestedSCDFiles value) { + this.minRequestedSCDFiles = value; + } + + /** + * 获取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; + } + + /** + * 获取manufacturer属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getManufacturer() { + return manufacturer; + } + + /** + * 设置manufacturer属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setManufacturer(String value) { + this.manufacturer = value; + } + + /** + * 获取configVersion属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getConfigVersion() { + return configVersion; + } + + /** + * 设置configVersion属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setConfigVersion(String value) { + this.configVersion = value; + } + + /** + * 获取originalSclVersion属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getOriginalSclVersion() { + if (originalSclVersion == null) { + return "2003"; + } else { + return originalSclVersion; + } + } + + /** + * 设置originalSclVersion属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setOriginalSclVersion(String value) { + this.originalSclVersion = value; + } + + /** + * 获取originalSclRevision属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getOriginalSclRevision() { + if (originalSclRevision == null) { + return "A"; + } else { + return originalSclRevision; + } + } + + /** + * 设置originalSclRevision属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setOriginalSclRevision(String value) { + this.originalSclRevision = value; + } + + /** + * 获取originalSclRelease属性的值。 + * + * @return + * possible object is + * {@link Short } + * + */ + public short getOriginalSclRelease() { + if (originalSclRelease == null) { + return ((short) 1); + } else { + return originalSclRelease; + } + } + + /** + * 设置originalSclRelease属性的值。 + * + * @param value + * allowed object is + * {@link Short } + * + */ + public void setOriginalSclRelease(Short value) { + this.originalSclRelease = value; + } + + /** + * 获取engRight属性的值。 + * + * @return + * possible object is + * {@link TRightEnum } + * + */ + public TRightEnum getEngRight() { + if (engRight == null) { + return TRightEnum.FULL; + } else { + return engRight; + } + } + + /** + * 设置engRight属性的值。 + * + * @param value + * allowed object is + * {@link TRightEnum } + * + */ + public void setEngRight(TRightEnum value) { + this.engRight = value; + } + + /** + * 获取owner属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getOwner() { + return owner; + } + + /** + * 设置owner属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setOwner(String value) { + this.owner = 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIEDSclRef.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIEDSclRef.java new file mode 100644 index 0000000..d0bb5d6 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TIEDSclRef.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tIEDSclRef complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tIEDSclRef">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <sequence>
    + *         <element name="SclFileReference" type="{http://www.iec.ch/61850/2003/SCL}tSclFileUUIDReference" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tIEDSclRef", propOrder = { + "sclFileReference" +}) +public class TIEDSclRef + extends TBaseElement +{ + + @XmlElement(name = "SclFileReference") + protected List sclFileReference; + + /** + * Gets the value of the sclFileReference property. + * + *

    + * 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 set method for the sclFileReference property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSclFileReference().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSclFileUUIDReference } + * + * + */ + public List getSclFileReference() { + if (sclFileReference == null) { + sclFileReference = new ArrayList(); + } + return this.sclFileReference; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TInputs.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TInputs.java new file mode 100644 index 0000000..62daf02 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TInputs.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tInputs complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tInputs">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="ExtRef" type="{http://www.iec.ch/61850/2003/SCL}tExtRef" maxOccurs="unbounded"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tInputs", propOrder = { + "extRef" +}) +public class TInputs + extends TUnNaming +{ + + @XmlElement(name = "ExtRef", required = true) + protected List extRef; + + /** + * Gets the value of the extRef property. + * + *

    + * 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 set method for the extRef property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getExtRef().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TExtRef } + * + * + */ + public List getExtRef() { + if (extRef == null) { + extRef = new ArrayList(); + } + return this.extRef; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TKDC.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TKDC.java new file mode 100644 index 0000000..e4804b7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TKDC.java @@ -0,0 +1,124 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tKDC complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tKDC">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="iedName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tIEDName" />
    + *       <attribute name="apName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *       <attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tKDC") +public class TKDC { + + @XmlAttribute(name = "iedName", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String iedName; + @XmlAttribute(name = "apName", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String apName; + @XmlAttribute(name = "apUuid") + protected String apUuid; + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLDevice.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLDevice.java new file mode 100644 index 0000000..46f5f1d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLDevice.java @@ -0,0 +1,275 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLDevice complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLDevice">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}LN0"/>
    + *         <element ref="{http://www.iec.ch/61850/2003/SCL}LN" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="AccessControl" type="{http://www.iec.ch/61850/2003/SCL}tAccessControl" minOccurs="0"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="inst" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *       <attribute name="ldName" type="{http://www.iec.ch/61850/2003/SCL}tLDName" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLDevice", propOrder = { + "ln0", + "ln", + "accessControl", + "labels" +}) +public class TLDevice + extends TUnNaming +{ + + @XmlElement(name = "LN0", required = true) + protected LN0 ln0; + @XmlElement(name = "LN") + protected List ln; + @XmlElement(name = "AccessControl") + protected TAccessControl accessControl; + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "inst", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String inst; + @XmlAttribute(name = "ldName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String ldName; + @XmlAttribute(name = "uuid") + protected String uuid; + @XmlAttribute(name = "templateUuid") + protected String templateUuid; + + /** + * 获取ln0属性的值。 + * + * @return + * possible object is + * {@link LN0 } + * + */ + public LN0 getLN0() { + return ln0; + } + + /** + * 设置ln0属性的值。 + * + * @param value + * allowed object is + * {@link LN0 } + * + */ + public void setLN0(LN0 value) { + this.ln0 = value; + } + + /** + * Gets the value of the ln property. + * + *

    + * 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 set method for the ln property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLN().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLN } + * + * + */ + public List getLN() { + if (ln == null) { + ln = new ArrayList(); + } + return this.ln; + } + + /** + * 获取accessControl属性的值。 + * + * @return + * possible object is + * {@link TAccessControl } + * + */ + public TAccessControl getAccessControl() { + return accessControl; + } + + /** + * 设置accessControl属性的值。 + * + * @param value + * allowed object is + * {@link TAccessControl } + * + */ + public void setAccessControl(TAccessControl value) { + this.accessControl = value; + } + + /** + * 获取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; + } + + /** + * 获取inst属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getInst() { + return inst; + } + + /** + * 设置inst属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setInst(String value) { + this.inst = value; + } + + /** + * 获取ldName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getLdName() { + return ldName; + } + + /** + * 设置ldName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLdName(String value) { + this.ldName = 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLLN0Enum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLLN0Enum.java new file mode 100644 index 0000000..0e56c72 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLLN0Enum.java @@ -0,0 +1,55 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLLN0Enum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tLLN0Enum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="LLN0"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tLLN0Enum") +@XmlEnum +public enum TLLN0Enum { + + @XmlEnumValue("LLN0") + LLN_0("LLN0"); + private final String value; + + TLLN0Enum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TLLN0Enum fromValue(String v) { + for (TLLN0Enum c: TLLN0Enum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN.java new file mode 100644 index 0000000..f69dc80 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN.java @@ -0,0 +1,137 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tLN complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLN">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAnyLN">
    + *       <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" default="" />
    + *       <attribute name="lnClass" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <attribute name="inst" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLN") +public class TLN + extends TAnyLN +{ + + @XmlAttribute(name = "prefix") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String prefix; + @XmlAttribute(name = "lnClass", required = true) + protected List lnClass; + @XmlAttribute(name = "inst", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String inst; + + /** + * 获取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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + return this.lnClass; + } + + /** + * 获取inst属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getInst() { + return inst; + } + + /** + * 设置inst属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setInst(String value) { + this.inst = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN0.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN0.java new file mode 100644 index 0000000..642c4c8 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLN0.java @@ -0,0 +1,213 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLN0 complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLN0">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAnyLN">
    + *       <sequence>
    + *         <element name="GSEControl" type="{http://www.iec.ch/61850/2003/SCL}tGSEControl" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="SampledValueControl" type="{http://www.iec.ch/61850/2003/SCL}tSampledValueControl" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="SettingControl" type="{http://www.iec.ch/61850/2003/SCL}tSettingControl" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="lnClass" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" fixed="LLN0" />
    + *       <attribute name="inst" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" fixed="" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLN0", propOrder = { + "gseControl", + "sampledValueControl", + "settingControl" +}) +@XmlSeeAlso({ + LN0 .class +}) +public class TLN0 + extends TAnyLN +{ + + @XmlElement(name = "GSEControl") + protected List gseControl; + @XmlElement(name = "SampledValueControl") + protected List sampledValueControl; + @XmlElement(name = "SettingControl") + protected TSettingControl settingControl; + @XmlAttribute(name = "lnClass", required = true) + protected List lnClass; + @XmlAttribute(name = "inst", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String inst; + + /** + * Gets the value of the gseControl property. + * + *

    + * 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 set method for the gseControl property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGSEControl().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGSEControl } + * + * + */ + public List getGSEControl() { + if (gseControl == null) { + gseControl = new ArrayList(); + } + return this.gseControl; + } + + /** + * Gets the value of the sampledValueControl property. + * + *

    + * 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 set method for the sampledValueControl property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSampledValueControl().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSampledValueControl } + * + * + */ + public List getSampledValueControl() { + if (sampledValueControl == null) { + sampledValueControl = new ArrayList(); + } + return this.sampledValueControl; + } + + /** + * 获取settingControl属性的值。 + * + * @return + * possible object is + * {@link TSettingControl } + * + */ + public TSettingControl getSettingControl() { + return settingControl; + } + + /** + * 设置settingControl属性的值。 + * + * @param value + * allowed object is + * {@link TSettingControl } + * + */ + public void setSettingControl(TSettingControl value) { + this.settingControl = value; + } + + /** + * Gets the value of the lnClass property. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + return this.lnClass; + } + + /** + * 获取inst属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getInst() { + if (inst == null) { + return ""; + } else { + return inst; + } + } + + /** + * 设置inst属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setInst(String value) { + this.inst = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNode.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNode.java new file mode 100644 index 0000000..be55675 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNode.java @@ -0,0 +1,342 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLNode complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLNode">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="iedName" type="{http://www.iec.ch/61850/2003/SCL}tIEDNameOrNone" default="None" />
    + *       <attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInstOrEmpty" default="" />
    + *       <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" default="" />
    + *       <attribute name="lnClass" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInstOrEmpty" default="" />
    + *       <attribute name="lnType" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="lnUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLNode", propOrder = { + "labels" +}) +public class TLNode + extends TUnNaming +{ + + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "iedName") + protected String iedName; + @XmlAttribute(name = "ldInst") + protected String ldInst; + @XmlAttribute(name = "prefix") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String prefix; + @XmlAttribute(name = "lnClass", required = true) + protected List lnClass; + @XmlAttribute(name = "lnInst") + protected String lnInst; + @XmlAttribute(name = "lnType") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String lnType; + @XmlAttribute(name = "lnUuid") + protected String lnUuid; + @XmlAttribute(name = "uuid") + protected String uuid; + @XmlAttribute(name = "templateUuid") + protected String templateUuid; + + /** + * 获取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; + } + + /** + * 获取iedName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getIedName() { + if (iedName == null) { + return "None"; + } else { + 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() { + if (ldInst == null) { + return ""; + } else { + 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() { + 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + return this.lnClass; + } + + /** + * 获取lnInst属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getLnInst() { + if (lnInst == null) { + return ""; + } else { + return lnInst; + } + } + + /** + * 设置lnInst属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLnInst(String value) { + this.lnInst = 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; + } + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeContainer.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeContainer.java new file mode 100644 index 0000000..249d7b2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeContainer.java @@ -0,0 +1,84 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLNodeContainer complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLNodeContainer">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tNaming">
    + *       <sequence>
    + *         <element name="LNode" type="{http://www.iec.ch/61850/2003/SCL}tLNode" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLNodeContainer", propOrder = { + "lNode" +}) +@XmlSeeAlso({ + TConnectivityNode.class, + TPowerSystemResource.class +}) +public abstract class TLNodeContainer + extends TNaming +{ + + @XmlElement(name = "LNode") + protected List lNode; + + /** + * Gets the value of the lNode property. + * + *

    + * 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 set method for the lNode property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLNode().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLNode } + * + * + */ + public List getLNode() { + if (lNode == null) { + lNode = new ArrayList(); + } + return this.lNode; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeType.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeType.java new file mode 100644 index 0000000..3880238 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLNodeType.java @@ -0,0 +1,174 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLNodeType complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLNodeType">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tIDNaming">
    + *       <sequence>
    + *         <element name="DO" type="{http://www.iec.ch/61850/2003/SCL}tDO" maxOccurs="unbounded"/>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="iedType" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" default="" />
    + *       <attribute name="lnClass" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLNodeType", propOrder = { + "_do", + "labels" +}) +public class TLNodeType + extends TIDNaming +{ + + @XmlElement(name = "DO", required = true) + protected List _do; + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "iedType") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String iedType; + @XmlAttribute(name = "lnClass", required = true) + protected List lnClass; + + /** + * Gets the value of the do property. + * + *

    + * 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 set method for the do property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getDO().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TDO } + * + * + */ + public List getDO() { + if (_do == null) { + _do = new ArrayList(); + } + return this._do; + } + + /** + * 获取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; + } + + /** + * Gets the value of the lnClass property. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + return this.lnClass; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLPHDEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLPHDEnum.java new file mode 100644 index 0000000..7879c4e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLPHDEnum.java @@ -0,0 +1,43 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLPHDEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tLPHDEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="LPHD"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tLPHDEnum") +@XmlEnum +public enum TLPHDEnum { + + LPHD; + + public String value() { + return name(); + } + + public static TLPHDEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabel.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabel.java new file mode 100644 index 0000000..c789658 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabel.java @@ -0,0 +1,130 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +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; + + +/** + *

    tLabel complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLabel">
    + *   <simpleContent>
    + *     <extension base="<http://www.w3.org/2001/XMLSchema>normalizedString">
    + *       <attribute name="id" type="{http://www.iec.ch/61850/2003/SCL}tID" />
    + *       <attribute name="lang" use="required" type="{http://www.w3.org/2001/XMLSchema}language" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLabel", propOrder = { + "value" +}) +public class TLabel { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String value; + @XmlAttribute(name = "id") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String id; + @XmlAttribute(name = "lang", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlSchemaType(name = "language") + protected String lang; + + /** + * 获取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; + } + + /** + * 获取id属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getId() { + return id; + } + + /** + * 设置id属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setId(String value) { + this.id = value; + } + + /** + * 获取lang属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getLang() { + return lang; + } + + /** + * 设置lang属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLang(String value) { + this.lang = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabels.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabels.java new file mode 100644 index 0000000..a21468b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLabels.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLabels complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLabels">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Label" type="{http://www.iec.ch/61850/2003/SCL}tLabel" maxOccurs="unbounded"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLabels", propOrder = { + "label" +}) +public class TLabels + extends TUnNaming +{ + + @XmlElement(name = "Label", required = true) + protected List label; + + /** + * Gets the value of the label property. + * + *

    + * 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 set method for the label property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLabel().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLabel } + * + * + */ + public List getLabel() { + if (label == null) { + label = new ArrayList(); + } + return this.label; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLine.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLine.java new file mode 100644 index 0000000..85b9616 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLine.java @@ -0,0 +1,238 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2026.03.02 时间 03:10:34 PM CST +// + + +package com.njcn.gather.icd.mapping.infrastructure.parser.generated; + +import java.math.BigDecimal; +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; + + +/** + *

    tLine complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLine">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipmentContainer">
    + *       <sequence>
    + *         <element name="Voltage" type="{http://www.iec.ch/61850/2003/SCL}tVoltage" minOccurs="0"/>
    + *         <element name="ConductingEquipment" type="{http://www.iec.ch/61850/2003/SCL}tConductingEquipment" maxOccurs="unbounded"/>
    + *         <element name="ConnectivityNode" type="{http://www.iec.ch/61850/2003/SCL}tConnectivityNode" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.iec.ch/61850/2003/SCL}tLineType" />
    + *       <attribute name="nomFreq">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}decimal">
    + *             <minInclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="numPhases">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
    + *             <minExclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLine", propOrder = { + "voltage", + "conductingEquipment", + "connectivityNode" +}) +public class TLine + extends TGeneralEquipmentContainer +{ + + @XmlElement(name = "Voltage") + protected TVoltage voltage; + @XmlElement(name = "ConductingEquipment", required = true) + protected List conductingEquipment; + @XmlElement(name = "ConnectivityNode") + protected List connectivityNode; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String type; + @XmlAttribute(name = "nomFreq") + protected BigDecimal nomFreq; + @XmlAttribute(name = "numPhases") + protected Short numPhases; + + /** + * 获取voltage属性的值。 + * + * @return + * possible object is + * {@link TVoltage } + * + */ + public TVoltage getVoltage() { + return voltage; + } + + /** + * 设置voltage属性的值。 + * + * @param value + * allowed object is + * {@link TVoltage } + * + */ + public void setVoltage(TVoltage value) { + this.voltage = value; + } + + /** + * Gets the value of the conductingEquipment property. + * + *

    + * 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 set method for the conductingEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConductingEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConductingEquipment } + * + * + */ + public List getConductingEquipment() { + if (conductingEquipment == null) { + conductingEquipment = new ArrayList(); + } + return this.conductingEquipment; + } + + /** + * Gets the value of the connectivityNode property. + * + *

    + * 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 set method for the connectivityNode property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConnectivityNode().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConnectivityNode } + * + * + */ + public List getConnectivityNode() { + if (connectivityNode == null) { + connectivityNode = new ArrayList(); + } + return this.connectivityNode; + } + + /** + * 获取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; + } + + /** + * 获取nomFreq属性的值。 + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getNomFreq() { + return nomFreq; + } + + /** + * 设置nomFreq属性的值。 + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setNomFreq(BigDecimal value) { + this.nomFreq = value; + } + + /** + * 获取numPhases属性的值。 + * + * @return + * possible object is + * {@link Short } + * + */ + public Short getNumPhases() { + return numPhases; + } + + /** + * 设置numPhases属性的值。 + * + * @param value + * allowed object is + * {@link Short } + * + */ + public void setNumPhases(Short value) { + this.numPhases = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLog.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLog.java new file mode 100644 index 0000000..9beb266 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLog.java @@ -0,0 +1,71 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tLog complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLog">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <attribute name="name" type="{http://www.iec.ch/61850/2003/SCL}tLogName" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLog") +public class TLog + extends TUnNaming +{ + + @XmlAttribute(name = "name") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String name; + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogControl.java new file mode 100644 index 0000000..46dc314 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogControl.java @@ -0,0 +1,289 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLogControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLogControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControlWithTriggerOpt">
    + *       <attribute name="ldInst" type="{http://www.iec.ch/61850/2003/SCL}tLDInst" />
    + *       <attribute name="prefix" type="{http://www.iec.ch/61850/2003/SCL}tPrefix" default="" />
    + *       <attribute name="lnClass" type="{http://www.iec.ch/61850/2003/SCL}tLNClassEnum" default="LLN0" />
    + *       <attribute name="lnInst" type="{http://www.iec.ch/61850/2003/SCL}tLNInst" />
    + *       <attribute name="logName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tLogName" />
    + *       <attribute name="logEna" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="reasonCode" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="bufTime" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" default="0" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLogControl") +public class TLogControl + extends TControlWithTriggerOpt +{ + + @XmlAttribute(name = "ldInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String ldInst; + @XmlAttribute(name = "prefix") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String prefix; + @XmlAttribute(name = "lnClass") + protected List lnClass; + @XmlAttribute(name = "lnInst") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String lnInst; + @XmlAttribute(name = "logName", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String logName; + @XmlAttribute(name = "logEna") + protected Boolean logEna; + @XmlAttribute(name = "reasonCode") + protected Boolean reasonCode; + @XmlAttribute(name = "bufTime") + @XmlSchemaType(name = "unsignedInt") + protected Long bufTime; + + /** + * 获取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() { + 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. + * + *

    + * 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 set method for the lnClass property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLnClass().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link String } + * + * + */ + public List getLnClass() { + if (lnClass == null) { + lnClass = new ArrayList(); + } + 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; + } + + /** + * 获取logName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getLogName() { + return logName; + } + + /** + * 设置logName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLogName(String value) { + this.logName = value; + } + + /** + * 获取logEna属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isLogEna() { + if (logEna == null) { + return true; + } else { + return logEna; + } + } + + /** + * 设置logEna属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setLogEna(Boolean value) { + this.logEna = value; + } + + /** + * 获取reasonCode属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isReasonCode() { + if (reasonCode == null) { + return true; + } else { + return reasonCode; + } + } + + /** + * 设置reasonCode属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setReasonCode(Boolean value) { + this.reasonCode = value; + } + + /** + * 获取bufTime属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public long getBufTime() { + if (bufTime == null) { + return 0L; + } else { + return bufTime; + } + } + + /** + * 设置bufTime属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setBufTime(Long value) { + this.bufTime = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogSettings.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogSettings.java new file mode 100644 index 0000000..348274f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TLogSettings.java @@ -0,0 +1,133 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tLogSettings complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tLogSettings">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceSettings">
    + *       <attribute name="logEna" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="trgOps" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="intgPd" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tLogSettings") +public class TLogSettings + extends TServiceSettings +{ + + @XmlAttribute(name = "logEna") + protected TServiceSettingsEnum logEna; + @XmlAttribute(name = "trgOps") + protected TServiceSettingsEnum trgOps; + @XmlAttribute(name = "intgPd") + protected TServiceSettingsEnum intgPd; + + /** + * 获取logEna属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getLogEna() { + if (logEna == null) { + return TServiceSettingsEnum.FIX; + } else { + return logEna; + } + } + + /** + * 设置logEna属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setLogEna(TServiceSettingsEnum value) { + this.logEna = value; + } + + /** + * 获取trgOps属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getTrgOps() { + if (trgOps == null) { + return TServiceSettingsEnum.FIX; + } else { + return trgOps; + } + } + + /** + * 设置trgOps属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setTrgOps(TServiceSettingsEnum value) { + this.trgOps = value; + } + + /** + * 获取intgPd属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getIntgPd() { + if (intgPd == null) { + return TServiceSettingsEnum.FIX; + } else { + return intgPd; + } + } + + /** + * 设置intgPd属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setIntgPd(TServiceSettingsEnum value) { + this.intgPd = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMcSecurity.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMcSecurity.java new file mode 100644 index 0000000..91d4d39 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMcSecurity.java @@ -0,0 +1,100 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tMcSecurity complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tMcSecurity">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="signature" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="encryption" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tMcSecurity") +public class TMcSecurity { + + @XmlAttribute(name = "signature") + protected Boolean signature; + @XmlAttribute(name = "encryption") + protected Boolean encryption; + + /** + * 获取signature属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSignature() { + if (signature == null) { + return false; + } else { + return signature; + } + } + + /** + * 设置signature属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSignature(Boolean value) { + this.signature = value; + } + + /** + * 获取encryption属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isEncryption() { + if (encryption == null) { + return false; + } else { + return encryption; + } + } + + /** + * 设置encryption属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setEncryption(Boolean value) { + this.encryption = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFile.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFile.java new file mode 100644 index 0000000..88d93e1 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFile.java @@ -0,0 +1,50 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + * + * Restriction of the tSclFileUUIDReference to express the SCD file resquest to properly configure an IED + * + * + *

    tMinRequestedSCDFile complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tMinRequestedSCDFile">
    + *   <complexContent>
    + *     <restriction base="{http://www.iec.ch/61850/2003/SCL}tSclFileUUIDReference">
    + *       <attribute name="fileType" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.iec.ch/61850/2003/SCL}tSCLFileType">
    + *             <enumeration value="SCD"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tMinRequestedSCDFile") +public class TMinRequestedSCDFile + extends TSclFileUUIDReference +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFiles.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFiles.java new file mode 100644 index 0000000..98207b7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TMinRequestedSCDFiles.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tMinRequestedSCDFiles complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tMinRequestedSCDFiles">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <sequence>
    + *         <element name="MinRequestedSCDFile" type="{http://www.iec.ch/61850/2003/SCL}tMinRequestedSCDFile" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tMinRequestedSCDFiles", propOrder = { + "minRequestedSCDFile" +}) +public class TMinRequestedSCDFiles + extends TBaseElement +{ + + @XmlElement(name = "MinRequestedSCDFile") + protected List minRequestedSCDFile; + + /** + * Gets the value of the minRequestedSCDFile property. + * + *

    + * 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 set method for the minRequestedSCDFile property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getMinRequestedSCDFile().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TMinRequestedSCDFile } + * + * + */ + public List getMinRequestedSCDFile() { + if (minRequestedSCDFile == null) { + minRequestedSCDFile = new ArrayList(); + } + return this.minRequestedSCDFile; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TNaming.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TNaming.java new file mode 100644 index 0000000..fa27fe9 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TNaming.java @@ -0,0 +1,196 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tNaming complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tNaming">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <sequence>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDesc"/>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agUuid"/>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tNaming", propOrder = { + "labels" +}) +@XmlSeeAlso({ + TLNodeContainer.class, + TCertificate.class, + TSubNetwork.class +}) +public abstract class TNaming + extends TBaseElement +{ + + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "name", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String name; + @XmlAttribute(name = "desc") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String desc; + @XmlAttribute(name = "uuid") + protected String uuid; + @XmlAttribute(name = "templateUuid") + protected String templateUuid; + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TOutputs.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TOutputs.java new file mode 100644 index 0000000..e941a8c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TOutputs.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tOutputs complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tOutputs">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="ExtCtrl" type="{http://www.iec.ch/61850/2003/SCL}tExtCtrl" maxOccurs="unbounded"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tOutputs", propOrder = { + "extCtrl" +}) +public class TOutputs + extends TUnNaming +{ + + @XmlElement(name = "ExtCtrl", required = true) + protected List extCtrl; + + /** + * Gets the value of the extCtrl property. + * + *

    + * 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 set method for the extCtrl property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getExtCtrl().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TExtCtrl } + * + * + */ + public List getExtCtrl() { + if (extCtrl == null) { + extCtrl = new ArrayList(); + } + return this.extCtrl; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TP.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TP.java new file mode 100644 index 0000000..002fd77 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TP.java @@ -0,0 +1,121 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlValue; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tP complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP">
    + *   <simpleContent>
    + *     <extension base="<http://www.iec.ch/61850/2003/SCL>tPAddr">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP", propOrder = { + "value" +}) +@XmlSeeAlso({ + TPIPv6SUBNET.class, + TPDNSName.class, + TPIPv6FlowLabel.class, + TPOSINSAP.class, + TPOSITSEL.class, + TPOSISSEL.class, + TPOSIPSEL.class, + TPOSIAPTitle.class, + TPOSIAPInvoke.class, + TPOSIAEQualifier.class, + TPOSIAEInvoke.class, + TPMACAddress.class, + TPAPPID.class, + TPVLANPRIORITY.class, + TPVLANID.class, + TPPort.class, + TPIPv6ClassOfTraffic.class, + TPC37118IPPort.class, + TPIPv6Base.class, + TPIPbase.class, + TPIPClassOfTraffic.class +}) +public class TP { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String value; + @XmlAttribute(name = "type", required = true) + protected String type; + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPAPPID.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPAPPID.java new file mode 100644 index 0000000..6b71cfd --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPAPPID.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_APPID complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_APPID">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="APPID" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_APPID") +public class TPAPPID + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPC37118IPPort.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPC37118IPPort.java new file mode 100644 index 0000000..caaacf2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPC37118IPPort.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_C37-118-IP-Port complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_C37-118-IP-Port">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="C37-118-IP-Port" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_C37-118-IP-Port") +public class TPC37118IPPort + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPDNSName.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPDNSName.java new file mode 100644 index 0000000..fc25338 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPDNSName.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_DNSName complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_DNSName">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="DNSName" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_DNSName") +public class TPDNSName + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIP.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIP.java new file mode 100644 index 0000000..bcc0a3b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIP.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IP complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IP">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPbase">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IP") +public class TPIP + extends TPIPbase +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPClassOfTraffic.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPClassOfTraffic.java new file mode 100644 index 0000000..4e5b96a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPClassOfTraffic.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IP-ClassOfTraffic complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IP-ClassOfTraffic">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP-ClassOfTraffic" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IP-ClassOfTraffic") +public class TPIPClassOfTraffic + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPGATEWAY.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPGATEWAY.java new file mode 100644 index 0000000..71c2d50 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPGATEWAY.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IP-GATEWAY complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IP-GATEWAY">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPbase">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP-GATEWAY" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IP-GATEWAY") +public class TPIPGATEWAY + extends TPIPbase +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPIGMPv3Src.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPIGMPv3Src.java new file mode 100644 index 0000000..439e217 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPIGMPv3Src.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IP-IGMPv3Src complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IP-IGMPv3Src">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPbase">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP-IGMPv3Src" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IP-IGMPv3Src") +public class TPIPIGMPv3Src + extends TPIPbase +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPSUBNET.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPSUBNET.java new file mode 100644 index 0000000..cce1be2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPSUBNET.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IP-SUBNET complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IP-SUBNET">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPbase">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP-SUBNET" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IP-SUBNET") +public class TPIPSUBNET + extends TPIPbase +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPbase.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPbase.java new file mode 100644 index 0000000..7f6f02d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPbase.java @@ -0,0 +1,46 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tP_IPbase complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPbase">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPbase") +@XmlSeeAlso({ + TPIP.class, + TPIPSUBNET.class, + TPIPGATEWAY.class, + TPIPIGMPv3Src.class +}) +public abstract class TPIPbase + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6.java new file mode 100644 index 0000000..89b96ca --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IPv6 complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPv6base">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IPv6" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6") +public class TPIPv6 + extends TPIPv6Base +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6Base.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6Base.java new file mode 100644 index 0000000..6e71fc5 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6Base.java @@ -0,0 +1,45 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tP_IPv6base complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6base">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6base") +@XmlSeeAlso({ + TPIPv6 .class, + TPIPv6GATEWAY.class, + TPIPv6IGMPv3Src.class +}) +public abstract class TPIPv6Base + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6ClassOfTraffic.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6ClassOfTraffic.java new file mode 100644 index 0000000..83f0ea7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6ClassOfTraffic.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IPv6ClassOfTraffic complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6ClassOfTraffic">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IPv6ClassOfTraffic" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6ClassOfTraffic") +public class TPIPv6ClassOfTraffic + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6FlowLabel.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6FlowLabel.java new file mode 100644 index 0000000..155ff96 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6FlowLabel.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IPv6FlowLabel complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6FlowLabel">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IPv6FlowLabel" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6FlowLabel") +public class TPIPv6FlowLabel + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6GATEWAY.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6GATEWAY.java new file mode 100644 index 0000000..1c5ee25 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6GATEWAY.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IPv6-GATEWAY complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6-GATEWAY">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPv6base">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IPv6-GATEWAY" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6-GATEWAY") +public class TPIPv6GATEWAY + extends TPIPv6Base +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6IGMPv3Src.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6IGMPv3Src.java new file mode 100644 index 0000000..f146910 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6IGMPv3Src.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IPv6-IGMPv3Src complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6-IGMPv3Src">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_IPv6base">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IPv6-IGMPv3Src" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6-IGMPv3Src") +public class TPIPv6IGMPv3Src + extends TPIPv6Base +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6SUBNET.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6SUBNET.java new file mode 100644 index 0000000..b4756e1 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPIPv6SUBNET.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_IPv6-SUBNET complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_IPv6-SUBNET">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IPv6-SUBNET" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_IPv6-SUBNET") +public class TPIPv6SUBNET + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMACAddress.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMACAddress.java new file mode 100644 index 0000000..1304812 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMACAddress.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_MAC-Address complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_MAC-Address">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="MAC-Address" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_MAC-Address") +public class TPMACAddress + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMMSPort.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMMSPort.java new file mode 100644 index 0000000..d02141b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPMMSPort.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_MMS-Port complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_MMS-Port">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_Port">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="MMS-Port" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_MMS-Port") +public class TPMMSPort + extends TPPort +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEInvoke.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEInvoke.java new file mode 100644 index 0000000..f67d74d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEInvoke.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_OSI-AE-Invoke complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-AE-Invoke">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-AE-Invoke" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-AE-Invoke") +public class TPOSIAEInvoke + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEQualifier.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEQualifier.java new file mode 100644 index 0000000..0c46341 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAEQualifier.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_OSI-AE-Qualifier complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-AE-Qualifier">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-AE-Qualifier" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-AE-Qualifier") +public class TPOSIAEQualifier + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPInvoke.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPInvoke.java new file mode 100644 index 0000000..33aa7ad --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPInvoke.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_OSI-AP-Invoke complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-AP-Invoke">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-AP-Invoke" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-AP-Invoke") +public class TPOSIAPInvoke + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPTitle.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPTitle.java new file mode 100644 index 0000000..c1963ba --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIAPTitle.java @@ -0,0 +1,50 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + * + * Based upon SCL_Communication complexType name="tP_OSI-AP-Title" + * Old was pattern=[0-9,]+ (base type "tP" had restriction that minLength=1) + * Problem: did not verify that arcs were correct and also "," was hard to read (it is just a comma) + * New pattern is {first 2 arcs>}{remainder of arcs} + * First 2 arcs: 0,{0..39} OR 1,{0..39} OR 2,{0..N} (it is a good idea to but not required to limit N to 47) + * Remainder of arcs: at least one of: ,{decimal-digits} + * Pattern: ([01],([0-9]|[1-3][0-9])|2,[0-9]+)(,[0-9]+)+ + * + * + *

    tP_OSI-AP-Title complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-AP-Title">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-AP-Title" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-AP-Title") +public class TPOSIAPTitle + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSINSAP.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSINSAP.java new file mode 100644 index 0000000..2d6a6cc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSINSAP.java @@ -0,0 +1,47 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + * + * Based upon SCL_Communication complexType name="tP_OSI-NSAP" + * Old was maxLength=40 pattern=[0-9A-F]+ (base type "tP" had restriction that minLength=1) + * Problem: did not verify that PAIRS of hex digits were used + * New pattern is "([0-9A-F][0-9A-F]){1,20}" + * + * + *

    tP_OSI-NSAP complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-NSAP">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-NSAP" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-NSAP") +public class TPOSINSAP + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIPSEL.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIPSEL.java new file mode 100644 index 0000000..114f8bd --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSIPSEL.java @@ -0,0 +1,47 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + * + * Based upon SCL_Communication complexType name="tP_OSI-PSEL" + * Old was maxLength=16 pattern=[0-9A-F]+ (base type "tP" had restriction that minLength=1) + * Problem: did not verify that PAIRS of hex digits were used and NIL was not allowed + * New pattern is "NIL|([0-9A-F][0-9A-F]){1,8}" + * + * + *

    tP_OSI-PSEL complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-PSEL">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-PSEL" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-PSEL") +public class TPOSIPSEL + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSISSEL.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSISSEL.java new file mode 100644 index 0000000..ac5c73c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSISSEL.java @@ -0,0 +1,47 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + * + * Based upon SCL_Communication complexType name="tP_OSI-SSEL" + * Old was maxLength=16 pattern=[0-9A-F]+ (base type "tP" had restriction that minLength=1) + * Problem: did not verify that PAIRS of hex digits were used and NIL was not allowed + * New pattern is "NIL|([0-9A-F][0-9A-F]){1,8}" + * + * + *

    tP_OSI-SSEL complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-SSEL">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-SSEL" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-SSEL") +public class TPOSISSEL + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSITSEL.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSITSEL.java new file mode 100644 index 0000000..845dfee --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPOSITSEL.java @@ -0,0 +1,47 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + * + * Based upon SCL_Communication complexType name="tP_OSI-TSEL" + * Old was maxLength=8 pattern=[0-9A-F]+ (base type "tP" had restriction that minLength=1) + * Problem: did not verify that PAIRS of hex digits were used and NIL was not allowed + * New pattern is "NIL|([0-9A-F][0-9A-F]){1,4}" + * + * + *

    tP_OSI-TSEL complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_OSI-TSEL">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="OSI-TSEL" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_OSI-TSEL") +public class TPOSITSEL + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPhysConn.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPhysConn.java new file mode 100644 index 0000000..2e56cda --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPhysConn.java @@ -0,0 +1,97 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlValue; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tP_PhysConn complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_PhysConn">
    + *   <simpleContent>
    + *     <extension base="<http://www.iec.ch/61850/2003/SCL>tPAddr">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypePhysConnEnum" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_PhysConn", propOrder = { + "value" +}) +public class TPPhysConn { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String value; + @XmlAttribute(name = "type", required = true) + protected String type; + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPort.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPort.java new file mode 100644 index 0000000..dd5b87d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPPort.java @@ -0,0 +1,46 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tP_Port complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_Port">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_Port") +@XmlSeeAlso({ + TPSNTPPort.class, + TPMMSPort.class, + TPUDPPort.class, + TPTCPPort.class +}) +public abstract class TPPort + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPSNTPPort.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPSNTPPort.java new file mode 100644 index 0000000..52c319a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPSNTPPort.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_SNTP-Port complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_SNTP-Port">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_Port">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="SNTP-Port" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_SNTP-Port") +public class TPSNTPPort + extends TPPort +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPTCPPort.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPTCPPort.java new file mode 100644 index 0000000..6a953bb --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPTCPPort.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_TCP-Port complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_TCP-Port">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_Port">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP-TCP-PORT" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_TCP-Port") +public class TPTCPPort + extends TPPort +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPUDPPort.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPUDPPort.java new file mode 100644 index 0000000..e461f1b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPUDPPort.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_UDP-Port complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_UDP-Port">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP_Port">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="IP-UDP-PORT" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_UDP-Port") +public class TPUDPPort + extends TPPort +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANID.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANID.java new file mode 100644 index 0000000..d2f42b5 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANID.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_VLAN-ID complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_VLAN-ID">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="VLAN-ID" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_VLAN-ID") +public class TPVLANID + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANPRIORITY.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANPRIORITY.java new file mode 100644 index 0000000..9163edd --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPVLANPRIORITY.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tP_VLAN-PRIORITY complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tP_VLAN-PRIORITY">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tP">
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPTypeEnum" fixed="VLAN-PRIORITY" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tP_VLAN-PRIORITY") +public class TPVLANPRIORITY + extends TP +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhaseEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhaseEnum.java new file mode 100644 index 0000000..8d86700 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhaseEnum.java @@ -0,0 +1,72 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPhaseEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPhaseEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="A"/>
    + *     <enumeration value="B"/>
    + *     <enumeration value="C"/>
    + *     <enumeration value="N"/>
    + *     <enumeration value="all"/>
    + *     <enumeration value="none"/>
    + *     <enumeration value="AB"/>
    + *     <enumeration value="BC"/>
    + *     <enumeration value="CA"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPhaseEnum") +@XmlEnum +public enum TPhaseEnum { + + A("A"), + B("B"), + C("C"), + N("N"), + @XmlEnumValue("all") + ALL("all"), + @XmlEnumValue("none") + NONE("none"), + AB("AB"), + BC("BC"), + CA("CA"); + private final String value; + + TPhaseEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPhaseEnum fromValue(String v) { + for (TPhaseEnum c: TPhaseEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhysConn.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhysConn.java new file mode 100644 index 0000000..5df88b4 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPhysConn.java @@ -0,0 +1,107 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPhysConn complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tPhysConn">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="P" type="{http://www.iec.ch/61850/2003/SCL}tP_PhysConn" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPhysConnTypeEnum" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tPhysConn", propOrder = { + "p" +}) +public class TPhysConn + extends TUnNaming +{ + + @XmlElement(name = "P") + protected List p; + @XmlAttribute(name = "type", required = true) + protected String type; + + /** + * Gets the value of the p property. + * + *

    + * 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 set method for the p property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getP().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TPPhysConn } + * + * + */ + public List getP() { + if (p == null) { + p = new ArrayList(); + } + return this.p; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerSystemResource.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerSystemResource.java new file mode 100644 index 0000000..565b96b --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerSystemResource.java @@ -0,0 +1,51 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tPowerSystemResource complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tPowerSystemResource">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tLNodeContainer">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tPowerSystemResource") +@XmlSeeAlso({ + TSubEquipment.class, + TTapChanger.class, + TEquipment.class, + TEquipmentContainer.class, + TFunction.class, + TSubFunction.class, + TAbstractEqFuncSubFunc.class, + TGeneralEquipmentContainer.class +}) +public abstract class TPowerSystemResource + extends TLNodeContainer +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformer.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformer.java new file mode 100644 index 0000000..49138c8 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformer.java @@ -0,0 +1,177 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPowerTransformer complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tPowerTransformer">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tEquipment">
    + *       <sequence>
    + *         <element name="TransformerWinding" type="{http://www.iec.ch/61850/2003/SCL}tTransformerWinding" maxOccurs="unbounded"/>
    + *         <element name="SubEquipment" type="{http://www.iec.ch/61850/2003/SCL}tSubEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tPowerTransformerEnum" fixed="PTR" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tPowerTransformer", propOrder = { + "transformerWinding", + "subEquipment", + "eqFunction" +}) +public class TPowerTransformer + extends TEquipment +{ + + @XmlElement(name = "TransformerWinding", required = true) + protected List transformerWinding; + @XmlElement(name = "SubEquipment") + protected List subEquipment; + @XmlElement(name = "EqFunction") + protected List eqFunction; + @XmlAttribute(name = "type", required = true) + protected TPowerTransformerEnum type; + + /** + * Gets the value of the transformerWinding property. + * + *

    + * 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 set method for the transformerWinding property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getTransformerWinding().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TTransformerWinding } + * + * + */ + public List getTransformerWinding() { + if (transformerWinding == null) { + transformerWinding = new ArrayList(); + } + return this.transformerWinding; + } + + /** + * Gets the value of the subEquipment property. + * + *

    + * 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 set method for the subEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubEquipment } + * + * + */ + public List getSubEquipment() { + if (subEquipment == null) { + subEquipment = new ArrayList(); + } + return this.subEquipment; + } + + /** + * Gets the value of the eqFunction property. + * + *

    + * 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 set method for the eqFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqFunction } + * + * + */ + public List getEqFunction() { + if (eqFunction == null) { + eqFunction = new ArrayList(); + } + return this.eqFunction; + } + + /** + * 获取type属性的值。 + * + * @return + * possible object is + * {@link TPowerTransformerEnum } + * + */ + public TPowerTransformerEnum getType() { + if (type == null) { + return TPowerTransformerEnum.PTR; + } else { + return type; + } + } + + /** + * 设置type属性的值。 + * + * @param value + * allowed object is + * {@link TPowerTransformerEnum } + * + */ + public void setType(TPowerTransformerEnum value) { + this.type = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformerEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformerEnum.java new file mode 100644 index 0000000..c22f6fe --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPowerTransformerEnum.java @@ -0,0 +1,43 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPowerTransformerEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPowerTransformerEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="PTR"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPowerTransformerEnum") +@XmlEnum +public enum TPowerTransformerEnum { + + PTR; + + public String value() { + return name(); + } + + public static TPowerTransformerEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedAttributeNameEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedAttributeNameEnum.java new file mode 100644 index 0000000..a3321f1 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedAttributeNameEnum.java @@ -0,0 +1,98 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedAttributeNameEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedAttributeNameEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="T"/>
    + *     <enumeration value="Test"/>
    + *     <enumeration value="Check"/>
    + *     <enumeration value="SIUnit"/>
    + *     <enumeration value="Oper"/>
    + *     <enumeration value="SBO"/>
    + *     <enumeration value="SBOw"/>
    + *     <enumeration value="Cancel"/>
    + *     <enumeration value="Addr"/>
    + *     <enumeration value="PRIORITY"/>
    + *     <enumeration value="VID"/>
    + *     <enumeration value="APPID"/>
    + *     <enumeration value="TransportInUse"/>
    + *     <enumeration value="IPClassOfTraffic"/>
    + *     <enumeration value="IPv6FlowLabel"/>
    + *     <enumeration value="IPAddressLength"/>
    + *     <enumeration value="IPAddress"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedAttributeNameEnum") +@XmlEnum +public enum TPredefinedAttributeNameEnum { + + T("T"), + @XmlEnumValue("Test") + TEST("Test"), + @XmlEnumValue("Check") + CHECK("Check"), + @XmlEnumValue("SIUnit") + SI_UNIT("SIUnit"), + @XmlEnumValue("Oper") + OPER("Oper"), + SBO("SBO"), + @XmlEnumValue("SBOw") + SB_OW("SBOw"), + @XmlEnumValue("Cancel") + CANCEL("Cancel"), + @XmlEnumValue("Addr") + ADDR("Addr"), + PRIORITY("PRIORITY"), + VID("VID"), + APPID("APPID"), + @XmlEnumValue("TransportInUse") + TRANSPORT_IN_USE("TransportInUse"), + @XmlEnumValue("IPClassOfTraffic") + IP_CLASS_OF_TRAFFIC("IPClassOfTraffic"), + @XmlEnumValue("IPv6FlowLabel") + I_PV_6_FLOW_LABEL("IPv6FlowLabel"), + @XmlEnumValue("IPAddressLength") + IP_ADDRESS_LENGTH("IPAddressLength"), + @XmlEnumValue("IPAddress") + IP_ADDRESS("IPAddress"); + private final String value; + + TPredefinedAttributeNameEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPredefinedAttributeNameEnum fromValue(String v) { + for (TPredefinedAttributeNameEnum c: TPredefinedAttributeNameEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedBasicTypeEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedBasicTypeEnum.java new file mode 100644 index 0000000..68618fc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedBasicTypeEnum.java @@ -0,0 +1,165 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedBasicTypeEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedBasicTypeEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="BOOLEAN"/>
    + *     <enumeration value="INT8"/>
    + *     <enumeration value="INT16"/>
    + *     <enumeration value="INT24"/>
    + *     <enumeration value="INT32"/>
    + *     <enumeration value="INT64"/>
    + *     <enumeration value="INT128"/>
    + *     <enumeration value="INT8U"/>
    + *     <enumeration value="INT16U"/>
    + *     <enumeration value="INT24U"/>
    + *     <enumeration value="INT32U"/>
    + *     <enumeration value="FLOAT32"/>
    + *     <enumeration value="FLOAT64"/>
    + *     <enumeration value="Enum"/>
    + *     <enumeration value="Dbpos"/>
    + *     <enumeration value="Tcmd"/>
    + *     <enumeration value="Quality"/>
    + *     <enumeration value="Timestamp"/>
    + *     <enumeration value="VisString32"/>
    + *     <enumeration value="VisString64"/>
    + *     <enumeration value="VisString65"/>
    + *     <enumeration value="VisString129"/>
    + *     <enumeration value="VisString255"/>
    + *     <enumeration value="Octet64"/>
    + *     <enumeration value="Unicode255"/>
    + *     <enumeration value="Struct"/>
    + *     <enumeration value="EntryTime"/>
    + *     <enumeration value="Check"/>
    + *     <enumeration value="ObjRef"/>
    + *     <enumeration value="Currency"/>
    + *     <enumeration value="PhyComAddr"/>
    + *     <enumeration value="TrgOps"/>
    + *     <enumeration value="OptFlds"/>
    + *     <enumeration value="SvOptFlds"/>
    + *     <enumeration value="LogOptFlds"/>
    + *     <enumeration value="EntryID"/>
    + *     <enumeration value="Octet6"/>
    + *     <enumeration value="Octet16"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedBasicTypeEnum") +@XmlEnum +public enum TPredefinedBasicTypeEnum { + + BOOLEAN("BOOLEAN"), + @XmlEnumValue("INT8") + INT_8("INT8"), + @XmlEnumValue("INT16") + INT_16("INT16"), + @XmlEnumValue("INT24") + INT_24("INT24"), + @XmlEnumValue("INT32") + INT_32("INT32"), + @XmlEnumValue("INT64") + INT_64("INT64"), + @XmlEnumValue("INT128") + INT_128("INT128"), + @XmlEnumValue("INT8U") + INT_8_U("INT8U"), + @XmlEnumValue("INT16U") + INT_16_U("INT16U"), + @XmlEnumValue("INT24U") + INT_24_U("INT24U"), + @XmlEnumValue("INT32U") + INT_32_U("INT32U"), + @XmlEnumValue("FLOAT32") + FLOAT_32("FLOAT32"), + @XmlEnumValue("FLOAT64") + FLOAT_64("FLOAT64"), + @XmlEnumValue("Enum") + ENUM("Enum"), + @XmlEnumValue("Dbpos") + DBPOS("Dbpos"), + @XmlEnumValue("Tcmd") + TCMD("Tcmd"), + @XmlEnumValue("Quality") + QUALITY("Quality"), + @XmlEnumValue("Timestamp") + TIMESTAMP("Timestamp"), + @XmlEnumValue("VisString32") + VIS_STRING_32("VisString32"), + @XmlEnumValue("VisString64") + VIS_STRING_64("VisString64"), + @XmlEnumValue("VisString65") + VIS_STRING_65("VisString65"), + @XmlEnumValue("VisString129") + VIS_STRING_129("VisString129"), + @XmlEnumValue("VisString255") + VIS_STRING_255("VisString255"), + @XmlEnumValue("Octet64") + OCTET_64("Octet64"), + @XmlEnumValue("Unicode255") + UNICODE_255("Unicode255"), + @XmlEnumValue("Struct") + STRUCT("Struct"), + @XmlEnumValue("EntryTime") + ENTRY_TIME("EntryTime"), + @XmlEnumValue("Check") + CHECK("Check"), + @XmlEnumValue("ObjRef") + OBJ_REF("ObjRef"), + @XmlEnumValue("Currency") + CURRENCY("Currency"), + @XmlEnumValue("PhyComAddr") + PHY_COM_ADDR("PhyComAddr"), + @XmlEnumValue("TrgOps") + TRG_OPS("TrgOps"), + @XmlEnumValue("OptFlds") + OPT_FLDS("OptFlds"), + @XmlEnumValue("SvOptFlds") + SV_OPT_FLDS("SvOptFlds"), + @XmlEnumValue("LogOptFlds") + LOG_OPT_FLDS("LogOptFlds"), + @XmlEnumValue("EntryID") + ENTRY_ID("EntryID"), + @XmlEnumValue("Octet6") + OCTET_6("Octet6"), + @XmlEnumValue("Octet16") + OCTET_16("Octet16"); + private final String value; + + TPredefinedBasicTypeEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPredefinedBasicTypeEnum fromValue(String v) { + for (TPredefinedBasicTypeEnum c: TPredefinedBasicTypeEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCDCEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCDCEnum.java new file mode 100644 index 0000000..e8900aa --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCDCEnum.java @@ -0,0 +1,147 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedCDCEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedCDCEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="SPS"/>
    + *     <enumeration value="DPS"/>
    + *     <enumeration value="INS"/>
    + *     <enumeration value="ENS"/>
    + *     <enumeration value="ACT"/>
    + *     <enumeration value="ACD"/>
    + *     <enumeration value="SEC"/>
    + *     <enumeration value="BCR"/>
    + *     <enumeration value="HST"/>
    + *     <enumeration value="VSS"/>
    + *     <enumeration value="MV"/>
    + *     <enumeration value="CMV"/>
    + *     <enumeration value="SAV"/>
    + *     <enumeration value="WYE"/>
    + *     <enumeration value="DEL"/>
    + *     <enumeration value="SEQ"/>
    + *     <enumeration value="HMV"/>
    + *     <enumeration value="HWYE"/>
    + *     <enumeration value="HDEL"/>
    + *     <enumeration value="SPC"/>
    + *     <enumeration value="DPC"/>
    + *     <enumeration value="INC"/>
    + *     <enumeration value="ENC"/>
    + *     <enumeration value="BSC"/>
    + *     <enumeration value="ISC"/>
    + *     <enumeration value="APC"/>
    + *     <enumeration value="BAC"/>
    + *     <enumeration value="SPG"/>
    + *     <enumeration value="ING"/>
    + *     <enumeration value="ENG"/>
    + *     <enumeration value="ORG"/>
    + *     <enumeration value="TSG"/>
    + *     <enumeration value="CUG"/>
    + *     <enumeration value="VSG"/>
    + *     <enumeration value="ASG"/>
    + *     <enumeration value="CURVE"/>
    + *     <enumeration value="CSG"/>
    + *     <enumeration value="DPL"/>
    + *     <enumeration value="LPL"/>
    + *     <enumeration value="CSD"/>
    + *     <enumeration value="CST"/>
    + *     <enumeration value="BTS"/>
    + *     <enumeration value="UTS"/>
    + *     <enumeration value="LTS"/>
    + *     <enumeration value="GTS"/>
    + *     <enumeration value="MTS"/>
    + *     <enumeration value="NTS"/>
    + *     <enumeration value="STS"/>
    + *     <enumeration value="CTS"/>
    + *     <enumeration value="OTS"/>
    + *     <enumeration value="VSD"/>
    + *     <enumeration value="ORS"/>
    + *     <enumeration value="TCS"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedCDCEnum") +@XmlEnum +public enum TPredefinedCDCEnum { + + SPS, + DPS, + INS, + ENS, + ACT, + ACD, + SEC, + BCR, + HST, + VSS, + MV, + CMV, + SAV, + WYE, + DEL, + SEQ, + HMV, + HWYE, + HDEL, + SPC, + DPC, + INC, + ENC, + BSC, + ISC, + APC, + BAC, + SPG, + ING, + ENG, + ORG, + TSG, + CUG, + VSG, + ASG, + CURVE, + CSG, + DPL, + LPL, + CSD, + CST, + BTS, + UTS, + LTS, + GTS, + MTS, + NTS, + STS, + CTS, + OTS, + VSD, + ORS, + TCS; + + public String value() { + return name(); + } + + public static TPredefinedCDCEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCommonConductingEquipmentEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCommonConductingEquipmentEnum.java new file mode 100644 index 0000000..80a5187 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedCommonConductingEquipmentEnum.java @@ -0,0 +1,93 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedCommonConductingEquipmentEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedCommonConductingEquipmentEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="CBR"/>
    + *     <enumeration value="DIS"/>
    + *     <enumeration value="VTR"/>
    + *     <enumeration value="CTR"/>
    + *     <enumeration value="GEN"/>
    + *     <enumeration value="CAP"/>
    + *     <enumeration value="REA"/>
    + *     <enumeration value="CON"/>
    + *     <enumeration value="MOT"/>
    + *     <enumeration value="EFN"/>
    + *     <enumeration value="PSH"/>
    + *     <enumeration value="BAT"/>
    + *     <enumeration value="BSH"/>
    + *     <enumeration value="CAB"/>
    + *     <enumeration value="GIL"/>
    + *     <enumeration value="LIN"/>
    + *     <enumeration value="RES"/>
    + *     <enumeration value="RRC"/>
    + *     <enumeration value="SAR"/>
    + *     <enumeration value="TCF"/>
    + *     <enumeration value="TCR"/>
    + *     <enumeration value="IFL"/>
    + *     <enumeration value="FAN"/>
    + *     <enumeration value="SCR"/>
    + *     <enumeration value="SMC"/>
    + *     <enumeration value="PMP"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedCommonConductingEquipmentEnum") +@XmlEnum +public enum TPredefinedCommonConductingEquipmentEnum { + + CBR, + DIS, + VTR, + CTR, + GEN, + CAP, + REA, + CON, + MOT, + EFN, + PSH, + BAT, + BSH, + CAB, + GIL, + LIN, + RES, + RRC, + SAR, + TCF, + TCR, + IFL, + FAN, + SCR, + SMC, + PMP; + + public String value() { + return name(); + } + + public static TPredefinedCommonConductingEquipmentEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedFCEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedFCEnum.java new file mode 100644 index 0000000..261dae9 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedFCEnum.java @@ -0,0 +1,67 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedFCEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedFCEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="ST"/>
    + *     <enumeration value="MX"/>
    + *     <enumeration value="CO"/>
    + *     <enumeration value="SP"/>
    + *     <enumeration value="SG"/>
    + *     <enumeration value="SE"/>
    + *     <enumeration value="SV"/>
    + *     <enumeration value="CF"/>
    + *     <enumeration value="DC"/>
    + *     <enumeration value="EX"/>
    + *     <enumeration value="SR"/>
    + *     <enumeration value="BL"/>
    + *     <enumeration value="OR"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedFCEnum") +@XmlEnum +public enum TPredefinedFCEnum { + + ST, + MX, + CO, + SP, + SG, + SE, + SV, + CF, + DC, + EX, + SR, + BL, + OR; + + public String value() { + return name(); + } + + public static TPredefinedFCEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedGeneralEquipmentEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedGeneralEquipmentEnum.java new file mode 100644 index 0000000..f3c400a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedGeneralEquipmentEnum.java @@ -0,0 +1,57 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedGeneralEquipmentEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedGeneralEquipmentEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="AXN"/>
    + *     <enumeration value="BAT"/>
    + *     <enumeration value="MOT"/>
    + *     <enumeration value="FAN"/>
    + *     <enumeration value="FIL"/>
    + *     <enumeration value="PMP"/>
    + *     <enumeration value="TNK"/>
    + *     <enumeration value="VLV"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedGeneralEquipmentEnum") +@XmlEnum +public enum TPredefinedGeneralEquipmentEnum { + + AXN, + BAT, + MOT, + FAN, + FIL, + PMP, + TNK, + VLV; + + public String value() { + return name(); + } + + public static TPredefinedGeneralEquipmentEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypeEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypeEnum.java new file mode 100644 index 0000000..5f7cea1 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypeEnum.java @@ -0,0 +1,137 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedPTypeEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedPTypeEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="IP"/>
    + *     <enumeration value="IP-SUBNET"/>
    + *     <enumeration value="IP-GATEWAY"/>
    + *     <enumeration value="OSI-NSAP"/>
    + *     <enumeration value="OSI-TSEL"/>
    + *     <enumeration value="OSI-SSEL"/>
    + *     <enumeration value="OSI-PSEL"/>
    + *     <enumeration value="OSI-AP-Title"/>
    + *     <enumeration value="OSI-AP-Invoke"/>
    + *     <enumeration value="OSI-AE-Qualifier"/>
    + *     <enumeration value="OSI-AE-Invoke"/>
    + *     <enumeration value="MAC-Address"/>
    + *     <enumeration value="APPID"/>
    + *     <enumeration value="VLAN-PRIORITY"/>
    + *     <enumeration value="VLAN-ID"/>
    + *     <enumeration value="SNTP-Port"/>
    + *     <enumeration value="MMS-Port"/>
    + *     <enumeration value="DNSName"/>
    + *     <enumeration value="IPv6FlowLabel"/>
    + *     <enumeration value="IPv6ClassOfTraffic"/>
    + *     <enumeration value="C37-118-IP-Port"/>
    + *     <enumeration value="IP-UDP-PORT"/>
    + *     <enumeration value="IP-TCP-PORT"/>
    + *     <enumeration value="IPv6"/>
    + *     <enumeration value="IPv6-SUBNET"/>
    + *     <enumeration value="IPv6-GATEWAY"/>
    + *     <enumeration value="IPv6-IGMPv3Src"/>
    + *     <enumeration value="IP-IGMPv3Src"/>
    + *     <enumeration value="IP-ClassOfTraffic"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedPTypeEnum") +@XmlEnum +public enum TPredefinedPTypeEnum { + + IP("IP"), + @XmlEnumValue("IP-SUBNET") + IP_SUBNET("IP-SUBNET"), + @XmlEnumValue("IP-GATEWAY") + IP_GATEWAY("IP-GATEWAY"), + @XmlEnumValue("OSI-NSAP") + OSI_NSAP("OSI-NSAP"), + @XmlEnumValue("OSI-TSEL") + OSI_TSEL("OSI-TSEL"), + @XmlEnumValue("OSI-SSEL") + OSI_SSEL("OSI-SSEL"), + @XmlEnumValue("OSI-PSEL") + OSI_PSEL("OSI-PSEL"), + @XmlEnumValue("OSI-AP-Title") + OSI_AP_TITLE("OSI-AP-Title"), + @XmlEnumValue("OSI-AP-Invoke") + OSI_AP_INVOKE("OSI-AP-Invoke"), + @XmlEnumValue("OSI-AE-Qualifier") + OSI_AE_QUALIFIER("OSI-AE-Qualifier"), + @XmlEnumValue("OSI-AE-Invoke") + OSI_AE_INVOKE("OSI-AE-Invoke"), + @XmlEnumValue("MAC-Address") + MAC_ADDRESS("MAC-Address"), + APPID("APPID"), + @XmlEnumValue("VLAN-PRIORITY") + VLAN_PRIORITY("VLAN-PRIORITY"), + @XmlEnumValue("VLAN-ID") + VLAN_ID("VLAN-ID"), + @XmlEnumValue("SNTP-Port") + SNTP_PORT("SNTP-Port"), + @XmlEnumValue("MMS-Port") + MMS_PORT("MMS-Port"), + @XmlEnumValue("DNSName") + DNS_NAME("DNSName"), + @XmlEnumValue("IPv6FlowLabel") + I_PV_6_FLOW_LABEL("IPv6FlowLabel"), + @XmlEnumValue("IPv6ClassOfTraffic") + I_PV_6_CLASS_OF_TRAFFIC("IPv6ClassOfTraffic"), + @XmlEnumValue("C37-118-IP-Port") + C_37_118_IP_PORT("C37-118-IP-Port"), + @XmlEnumValue("IP-UDP-PORT") + IP_UDP_PORT("IP-UDP-PORT"), + @XmlEnumValue("IP-TCP-PORT") + IP_TCP_PORT("IP-TCP-PORT"), + @XmlEnumValue("IPv6") + I_PV_6("IPv6"), + @XmlEnumValue("IPv6-SUBNET") + I_PV_6_SUBNET("IPv6-SUBNET"), + @XmlEnumValue("IPv6-GATEWAY") + I_PV_6_GATEWAY("IPv6-GATEWAY"), + @XmlEnumValue("IPv6-IGMPv3Src") + I_PV_6_IGM_PV_3_SRC("IPv6-IGMPv3Src"), + @XmlEnumValue("IP-IGMPv3Src") + IP_IGM_PV_3_SRC("IP-IGMPv3Src"), + @XmlEnumValue("IP-ClassOfTraffic") + IP_CLASS_OF_TRAFFIC("IP-ClassOfTraffic"); + private final String value; + + TPredefinedPTypeEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPredefinedPTypeEnum fromValue(String v) { + for (TPredefinedPTypeEnum c: TPredefinedPTypeEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypePhysConnEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypePhysConnEnum.java new file mode 100644 index 0000000..b01bb86 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPTypePhysConnEnum.java @@ -0,0 +1,64 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedPTypePhysConnEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedPTypePhysConnEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="Type"/>
    + *     <enumeration value="Plug"/>
    + *     <enumeration value="Cable"/>
    + *     <enumeration value="Port"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedPTypePhysConnEnum") +@XmlEnum +public enum TPredefinedPTypePhysConnEnum { + + @XmlEnumValue("Type") + TYPE("Type"), + @XmlEnumValue("Plug") + PLUG("Plug"), + @XmlEnumValue("Cable") + CABLE("Cable"), + @XmlEnumValue("Port") + PORT("Port"); + private final String value; + + TPredefinedPTypePhysConnEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPredefinedPTypePhysConnEnum fromValue(String v) { + for (TPredefinedPTypePhysConnEnum c: TPredefinedPTypePhysConnEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPhysConnTypeEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPhysConnTypeEnum.java new file mode 100644 index 0000000..c23793a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedPhysConnTypeEnum.java @@ -0,0 +1,58 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedPhysConnTypeEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedPhysConnTypeEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *     <enumeration value="Connection"/>
    + *     <enumeration value="RedConn"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedPhysConnTypeEnum") +@XmlEnum +public enum TPredefinedPhysConnTypeEnum { + + @XmlEnumValue("Connection") + CONNECTION("Connection"), + @XmlEnumValue("RedConn") + RED_CONN("RedConn"); + private final String value; + + TPredefinedPhysConnTypeEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPredefinedPhysConnTypeEnum fromValue(String v) { + for (TPredefinedPhysConnTypeEnum c: TPredefinedPhysConnTypeEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedSCLFileType.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedSCLFileType.java new file mode 100644 index 0000000..aa95d61 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedSCLFileType.java @@ -0,0 +1,53 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedSCLFileType的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedSCLFileType">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="ICD"/>
    + *     <enumeration value="IID"/>
    + *     <enumeration value="CID"/>
    + *     <enumeration value="SSD"/>
    + *     <enumeration value="SCD"/>
    + *     <enumeration value="SED"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedSCLFileType") +@XmlEnum +public enum TPredefinedSCLFileType { + + ICD, + IID, + CID, + SSD, + SCD, + SED; + + public String value() { + return name(); + } + + public static TPredefinedSCLFileType fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedTypeOfSecurityEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedTypeOfSecurityEnum.java new file mode 100644 index 0000000..82716fd --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPredefinedTypeOfSecurityEnum.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tPredefinedTypeOfSecurityEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tPredefinedTypeOfSecurityEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *     <enumeration value="None"/>
    + *     <enumeration value="Signature"/>
    + *     <enumeration value="SignatureAndEncryption"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tPredefinedTypeOfSecurityEnum") +@XmlEnum +public enum TPredefinedTypeOfSecurityEnum { + + @XmlEnumValue("None") + NONE("None"), + @XmlEnumValue("Signature") + SIGNATURE("Signature"), + @XmlEnumValue("SignatureAndEncryption") + SIGNATURE_AND_ENCRYPTION("SignatureAndEncryption"); + private final String value; + + TPredefinedTypeOfSecurityEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TPredefinedTypeOfSecurityEnum fromValue(String v) { + for (TPredefinedTypeOfSecurityEnum c: TPredefinedTypeOfSecurityEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPrivate.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPrivate.java new file mode 100644 index 0000000..fe5fbf6 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TPrivate.java @@ -0,0 +1,106 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tPrivate complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tPrivate">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAnyContentFromOtherNamespace">
    + *       <attribute name="type" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <minLength value="1"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="source" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tPrivate") +public class TPrivate + extends TAnyContentFromOtherNamespace +{ + + @XmlAttribute(name = "type", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String type; + @XmlAttribute(name = "source") + @XmlSchemaType(name = "anyURI") + protected String source; + + /** + * 获取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; + } + + /** + * 获取source属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSource() { + return source; + } + + /** + * 设置source属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSource(String value) { + this.source = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProcess.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProcess.java new file mode 100644 index 0000000..01747e0 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProcess.java @@ -0,0 +1,209 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tProcess complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tProcess">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipmentContainer">
    + *       <sequence>
    + *         <element name="ConductingEquipment" type="{http://www.iec.ch/61850/2003/SCL}tConductingEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Substation" type="{http://www.iec.ch/61850/2003/SCL}tSubstation" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Line" type="{http://www.iec.ch/61850/2003/SCL}tLine" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="Process" type="{http://www.iec.ch/61850/2003/SCL}tProcess" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.iec.ch/61850/2003/SCL}tProcessType" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tProcess", propOrder = { + "conductingEquipment", + "substation", + "line", + "process" +}) +public class TProcess + extends TGeneralEquipmentContainer +{ + + @XmlElement(name = "ConductingEquipment") + protected List conductingEquipment; + @XmlElement(name = "Substation") + protected List substation; + @XmlElement(name = "Line") + protected List line; + @XmlElement(name = "Process") + protected List process; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String type; + + /** + * Gets the value of the conductingEquipment property. + * + *

    + * 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 set method for the conductingEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConductingEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConductingEquipment } + * + * + */ + public List getConductingEquipment() { + if (conductingEquipment == null) { + conductingEquipment = new ArrayList(); + } + return this.conductingEquipment; + } + + /** + * Gets the value of the substation property. + * + *

    + * 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 set method for the substation property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubstation().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubstation } + * + * + */ + public List getSubstation() { + if (substation == null) { + substation = new ArrayList(); + } + return this.substation; + } + + /** + * Gets the value of the line property. + * + *

    + * 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 set method for the line property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLine().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLine } + * + * + */ + public List getLine() { + if (line == null) { + line = new ArrayList(); + } + return this.line; + } + + /** + * Gets the value of the process property. + * + *

    + * 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 set method for the process property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getProcess().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TProcess } + * + * + */ + public List getProcess() { + if (process == null) { + process = new ArrayList(); + } + return this.process; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtNs.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtNs.java new file mode 100644 index 0000000..1c7947d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtNs.java @@ -0,0 +1,108 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlValue; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tProtNs complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tProtNs">
    + *   <simpleContent>
    + *     <extension base="<http://www.iec.ch/61850/2003/SCL>tNamespaceName">
    + *       <attribute name="type" default="8-MMS">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <minLength value="1"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tProtNs", propOrder = { + "value" +}) +public class TProtNs { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String value; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String type; + + /** + * 获取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; + } + + /** + * 获取type属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getType() { + if (type == null) { + return "8-MMS"; + } else { + return type; + } + } + + /** + * 设置type属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setType(String value) { + this.type = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtocol.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtocol.java new file mode 100644 index 0000000..5474b9a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TProtocol.java @@ -0,0 +1,91 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.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; + + +/** + *

    tProtocol complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tProtocol">
    + *   <simpleContent>
    + *     <extension base="<http://www.w3.org/2001/XMLSchema>normalizedString">
    + *       <attribute name="mustUnderstand" use="required" type="{http://www.w3.org/2001/XMLSchema}boolean" fixed="true" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tProtocol", propOrder = { + "value" +}) +public class TProtocol { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String value; + @XmlAttribute(name = "mustUnderstand", required = true) + protected boolean mustUnderstand; + + /** + * 获取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; + } + + /** + * 获取mustUnderstand属性的值。 + * + */ + public boolean isMustUnderstand() { + return mustUnderstand; + } + + /** + * 设置mustUnderstand属性的值。 + * + */ + public void setMustUnderstand(boolean value) { + this.mustUnderstand = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProt.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProt.java new file mode 100644 index 0000000..50d6a82 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProt.java @@ -0,0 +1,131 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tRedProt complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tRedProt">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="hsr" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="prp" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="rstp" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tRedProt") +public class TRedProt { + + @XmlAttribute(name = "hsr") + protected Boolean hsr; + @XmlAttribute(name = "prp") + protected Boolean prp; + @XmlAttribute(name = "rstp") + protected Boolean rstp; + + /** + * 获取hsr属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isHsr() { + if (hsr == null) { + return false; + } else { + return hsr; + } + } + + /** + * 设置hsr属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setHsr(Boolean value) { + this.hsr = value; + } + + /** + * 获取prp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isPrp() { + if (prp == null) { + return false; + } else { + return prp; + } + } + + /** + * 设置prp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setPrp(Boolean value) { + this.prp = value; + } + + /** + * 获取rstp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isRstp() { + if (rstp == null) { + return false; + } else { + return rstp; + } + } + + /** + * 设置rstp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setRstp(Boolean value) { + this.rstp = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProtEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProtEnum.java new file mode 100644 index 0000000..77ca316 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRedProtEnum.java @@ -0,0 +1,64 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tRedProtEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tRedProtEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="none"/>
    + *     <enumeration value="hsr"/>
    + *     <enumeration value="prp"/>
    + *     <enumeration value="rstp"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tRedProtEnum") +@XmlEnum +public enum TRedProtEnum { + + @XmlEnumValue("none") + NONE("none"), + @XmlEnumValue("hsr") + HSR("hsr"), + @XmlEnumValue("prp") + PRP("prp"), + @XmlEnumValue("rstp") + RSTP("rstp"); + private final String value; + + TRedProtEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TRedProtEnum fromValue(String v) { + for (TRedProtEnum c: TRedProtEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportControl.java new file mode 100644 index 0000000..01649cc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportControl.java @@ -0,0 +1,519 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tReportControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tReportControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControlWithTriggerOpt">
    + *       <sequence>
    + *         <element name="OptFields">
    + *           <complexType>
    + *             <complexContent>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *                 <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agOptFields"/>
    + *               </restriction>
    + *             </complexContent>
    + *           </complexType>
    + *         </element>
    + *         <element name="RptEnabled" type="{http://www.iec.ch/61850/2003/SCL}tRptEnabled" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="rptID" type="{http://www.iec.ch/61850/2003/SCL}tMessageID" />
    + *       <attribute name="confRev" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="buffered" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="bufTime" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" default="0" />
    + *       <attribute name="indexed" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tReportControl", propOrder = { + "optFields", + "rptEnabled" +}) +public class TReportControl + extends TControlWithTriggerOpt +{ + + @XmlElement(name = "OptFields", required = true) + protected TReportControl.OptFields optFields; + @XmlElement(name = "RptEnabled") + protected TRptEnabled rptEnabled; + @XmlAttribute(name = "rptID") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String rptID; + @XmlAttribute(name = "confRev", required = true) + @XmlSchemaType(name = "unsignedInt") + protected long confRev; + @XmlAttribute(name = "buffered") + protected Boolean buffered; + @XmlAttribute(name = "bufTime") + @XmlSchemaType(name = "unsignedInt") + protected Long bufTime; + @XmlAttribute(name = "indexed") + protected Boolean indexed; + + /** + * 获取optFields属性的值。 + * + * @return + * possible object is + * {@link TReportControl.OptFields } + * + */ + public TReportControl.OptFields getOptFields() { + return optFields; + } + + /** + * 设置optFields属性的值。 + * + * @param value + * allowed object is + * {@link TReportControl.OptFields } + * + */ + public void setOptFields(TReportControl.OptFields value) { + this.optFields = value; + } + + /** + * 获取rptEnabled属性的值。 + * + * @return + * possible object is + * {@link TRptEnabled } + * + */ + public TRptEnabled getRptEnabled() { + return rptEnabled; + } + + /** + * 设置rptEnabled属性的值。 + * + * @param value + * allowed object is + * {@link TRptEnabled } + * + */ + public void setRptEnabled(TRptEnabled value) { + this.rptEnabled = value; + } + + /** + * 获取rptID属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getRptID() { + return rptID; + } + + /** + * 设置rptID属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRptID(String value) { + this.rptID = value; + } + + /** + * 获取confRev属性的值。 + * + */ + public long getConfRev() { + return confRev; + } + + /** + * 设置confRev属性的值。 + * + */ + public void setConfRev(long value) { + this.confRev = value; + } + + /** + * 获取buffered属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isBuffered() { + if (buffered == null) { + return false; + } else { + return buffered; + } + } + + /** + * 设置buffered属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBuffered(Boolean value) { + this.buffered = value; + } + + /** + * 获取bufTime属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public long getBufTime() { + if (bufTime == null) { + return 0L; + } else { + return bufTime; + } + } + + /** + * 设置bufTime属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setBufTime(Long value) { + this.bufTime = value; + } + + /** + * 获取indexed属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isIndexed() { + if (indexed == null) { + return true; + } else { + return indexed; + } + } + + /** + * 设置indexed属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIndexed(Boolean value) { + this.indexed = value; + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <complexContent>
    +     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    +     *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agOptFields"/>
    +     *     </restriction>
    +     *   </complexContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class OptFields { + + @XmlAttribute(name = "seqNum") + protected Boolean seqNum; + @XmlAttribute(name = "timeStamp") + protected Boolean timeStamp; + @XmlAttribute(name = "dataSet") + protected Boolean dataSet; + @XmlAttribute(name = "reasonCode") + protected Boolean reasonCode; + @XmlAttribute(name = "dataRef") + protected Boolean dataRef; + @XmlAttribute(name = "entryID") + protected Boolean entryID; + @XmlAttribute(name = "configRef") + protected Boolean configRef; + @XmlAttribute(name = "bufOvfl") + protected Boolean bufOvfl; + + /** + * 获取seqNum属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSeqNum() { + if (seqNum == null) { + return false; + } else { + return seqNum; + } + } + + /** + * 设置seqNum属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSeqNum(Boolean value) { + this.seqNum = value; + } + + /** + * 获取timeStamp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isTimeStamp() { + if (timeStamp == null) { + return false; + } else { + return timeStamp; + } + } + + /** + * 设置timeStamp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setTimeStamp(Boolean value) { + this.timeStamp = value; + } + + /** + * 获取dataSet属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isDataSet() { + if (dataSet == null) { + return false; + } else { + return dataSet; + } + } + + /** + * 设置dataSet属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setDataSet(Boolean value) { + this.dataSet = value; + } + + /** + * 获取reasonCode属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isReasonCode() { + if (reasonCode == null) { + return false; + } else { + return reasonCode; + } + } + + /** + * 设置reasonCode属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setReasonCode(Boolean value) { + this.reasonCode = value; + } + + /** + * 获取dataRef属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isDataRef() { + if (dataRef == null) { + return false; + } else { + return dataRef; + } + } + + /** + * 设置dataRef属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setDataRef(Boolean value) { + this.dataRef = value; + } + + /** + * 获取entryID属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isEntryID() { + if (entryID == null) { + return false; + } else { + return entryID; + } + } + + /** + * 设置entryID属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setEntryID(Boolean value) { + this.entryID = value; + } + + /** + * 获取configRef属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isConfigRef() { + if (configRef == null) { + return false; + } else { + return configRef; + } + } + + /** + * 设置configRef属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setConfigRef(Boolean value) { + this.configRef = value; + } + + /** + * 获取bufOvfl属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isBufOvfl() { + if (bufOvfl == null) { + return true; + } else { + return bufOvfl; + } + } + + /** + * 设置bufOvfl属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBufOvfl(Boolean value) { + this.bufOvfl = value; + } + + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportSettings.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportSettings.java new file mode 100644 index 0000000..b3f1a73 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TReportSettings.java @@ -0,0 +1,257 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tReportSettings complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tReportSettings">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceSettings">
    + *       <attribute name="rptID" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="optFields" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="bufTime" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="trgOps" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="intgPd" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="resvTms" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="owner" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tReportSettings") +public class TReportSettings + extends TServiceSettings +{ + + @XmlAttribute(name = "rptID") + protected TServiceSettingsEnum rptID; + @XmlAttribute(name = "optFields") + protected TServiceSettingsEnum optFields; + @XmlAttribute(name = "bufTime") + protected TServiceSettingsEnum bufTime; + @XmlAttribute(name = "trgOps") + protected TServiceSettingsEnum trgOps; + @XmlAttribute(name = "intgPd") + protected TServiceSettingsEnum intgPd; + @XmlAttribute(name = "resvTms") + protected Boolean resvTms; + @XmlAttribute(name = "owner") + protected Boolean owner; + + /** + * 获取rptID属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getRptID() { + if (rptID == null) { + return TServiceSettingsEnum.FIX; + } else { + return rptID; + } + } + + /** + * 设置rptID属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setRptID(TServiceSettingsEnum value) { + this.rptID = value; + } + + /** + * 获取optFields属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getOptFields() { + if (optFields == null) { + return TServiceSettingsEnum.FIX; + } else { + return optFields; + } + } + + /** + * 设置optFields属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setOptFields(TServiceSettingsEnum value) { + this.optFields = value; + } + + /** + * 获取bufTime属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getBufTime() { + if (bufTime == null) { + return TServiceSettingsEnum.FIX; + } else { + return bufTime; + } + } + + /** + * 设置bufTime属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setBufTime(TServiceSettingsEnum value) { + this.bufTime = value; + } + + /** + * 获取trgOps属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getTrgOps() { + if (trgOps == null) { + return TServiceSettingsEnum.FIX; + } else { + return trgOps; + } + } + + /** + * 设置trgOps属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setTrgOps(TServiceSettingsEnum value) { + this.trgOps = value; + } + + /** + * 获取intgPd属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getIntgPd() { + if (intgPd == null) { + return TServiceSettingsEnum.FIX; + } else { + return intgPd; + } + } + + /** + * 设置intgPd属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setIntgPd(TServiceSettingsEnum value) { + this.intgPd = value; + } + + /** + * 获取resvTms属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isResvTms() { + if (resvTms == null) { + return false; + } else { + return resvTms; + } + } + + /** + * 设置resvTms属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setResvTms(Boolean value) { + this.resvTms = value; + } + + /** + * 获取owner属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isOwner() { + if (owner == null) { + return false; + } else { + return owner; + } + } + + /** + * 设置owner属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setOwner(Boolean value) { + this.owner = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRightEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRightEnum.java new file mode 100644 index 0000000..6bd376a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRightEnum.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tRightEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tRightEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *     <enumeration value="full"/>
    + *     <enumeration value="fix"/>
    + *     <enumeration value="dataflow"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tRightEnum") +@XmlEnum +public enum TRightEnum { + + @XmlEnumValue("full") + FULL("full"), + @XmlEnumValue("fix") + FIX("fix"), + @XmlEnumValue("dataflow") + DATAFLOW("dataflow"); + private final String value; + + TRightEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TRightEnum fromValue(String v) { + for (TRightEnum c: TRightEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRptEnabled.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRptEnabled.java new file mode 100644 index 0000000..e491041 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TRptEnabled.java @@ -0,0 +1,117 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tRptEnabled complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tRptEnabled">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="ClientLN" type="{http://www.iec.ch/61850/2003/SCL}tClientLN" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="max" default="1">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *             <minExclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tRptEnabled", propOrder = { + "clientLN" +}) +public class TRptEnabled + extends TUnNaming +{ + + @XmlElement(name = "ClientLN") + protected List clientLN; + @XmlAttribute(name = "max") + protected Long max; + + /** + * Gets the value of the clientLN property. + * + *

    + * 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 set method for the clientLN property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getClientLN().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TClientLN } + * + * + */ + public List getClientLN() { + if (clientLN == null) { + clientLN = new ArrayList(); + } + return this.clientLN; + } + + /** + * 获取max属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public long getMax() { + if (max == null) { + return 1L; + } else { + return max; + } + } + + /** + * 设置max属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setMax(Long value) { + this.max = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSCSM.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSCSM.java new file mode 100644 index 0000000..4505f7d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSCSM.java @@ -0,0 +1,133 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSCSM complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSCSM">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    + *       <attribute name="iec61850_8_1" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="iec61850_8_2" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="serverAssociationInitiation" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSCSM") +public class TSCSM + extends TServiceYesNo +{ + + @XmlAttribute(name = "iec61850_8_1") + protected Boolean iec6185081; + @XmlAttribute(name = "iec61850_8_2") + protected Boolean iec6185082; + @XmlAttribute(name = "serverAssociationInitiation") + protected Boolean serverAssociationInitiation; + + /** + * 获取iec6185081属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isIec6185081() { + if (iec6185081 == null) { + return true; + } else { + return iec6185081; + } + } + + /** + * 设置iec6185081属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIec6185081(Boolean value) { + this.iec6185081 = value; + } + + /** + * 获取iec6185082属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isIec6185082() { + if (iec6185082 == null) { + return false; + } else { + return iec6185082; + } + } + + /** + * 设置iec6185082属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIec6185082(Boolean value) { + this.iec6185082 = value; + } + + /** + * 获取serverAssociationInitiation属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isServerAssociationInitiation() { + if (serverAssociationInitiation == null) { + return false; + } else { + return serverAssociationInitiation; + } + } + + /** + * 设置serverAssociationInitiation属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setServerAssociationInitiation(Boolean value) { + this.serverAssociationInitiation = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDI.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDI.java new file mode 100644 index 0000000..fc9db28 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDI.java @@ -0,0 +1,208 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tSDI complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSDI">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <choice maxOccurs="unbounded" minOccurs="0">
    + *           <element name="SDI" type="{http://www.iec.ch/61850/2003/SCL}tSDI"/>
    + *           <element name="DAI" type="{http://www.iec.ch/61850/2003/SCL}tDAI"/>
    + *         </choice>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAttributeNameEnum" />
    + *       <attribute name="ix" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="sAddr">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *             <maxLength value="255"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSDI", propOrder = { + "sdiOrDAI", + "labels" +}) +public class TSDI + extends TUnNaming +{ + + @XmlElements({ + @XmlElement(name = "SDI", type = TSDI.class), + @XmlElement(name = "DAI", type = TDAI.class) + }) + protected List sdiOrDAI; + @XmlElement(name = "Labels") + protected TLabels labels; + @XmlAttribute(name = "name", required = true) + protected String name; + @XmlAttribute(name = "ix") + @XmlSchemaType(name = "unsignedInt") + protected Long ix; + @XmlAttribute(name = "sAddr") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String sAddr; + + /** + * Gets the value of the sdiOrDAI property. + * + *

    + * 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 set method for the sdiOrDAI property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSDIOrDAI().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSDI } + * {@link TDAI } + * + * + */ + public List getSDIOrDAI() { + if (sdiOrDAI == null) { + sdiOrDAI = new ArrayList(); + } + 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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDO.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDO.java new file mode 100644 index 0000000..070f0f3 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSDO.java @@ -0,0 +1,163 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.NormalizedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tSDO complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSDO">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Labels" type="{http://www.iec.ch/61850/2003/SCL}tLabels" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="name" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSubDataName" />
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="count" type="{http://www.iec.ch/61850/2003/SCL}tSDOCount" default="0" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSDO", propOrder = { + "labels" +}) +public class TSDO + 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 = "count") + protected String count; + + /** + * 获取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; + } + + /** + * 获取count属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCount() { + if (count == null) { + return "0"; + } else { + return count; + } + } + + /** + * 设置count属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCount(String value) { + this.count = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMV.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMV.java new file mode 100644 index 0000000..558b053 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMV.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSMV complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSMV">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControlBlock">
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSMV") +public class TSMV + extends TControlBlock +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVDeliveryEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVDeliveryEnum.java new file mode 100644 index 0000000..e55b2c8 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVDeliveryEnum.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSMVDeliveryEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tSMVDeliveryEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="unicast"/>
    + *     <enumeration value="multicast"/>
    + *     <enumeration value="both"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tSMVDeliveryEnum") +@XmlEnum +public enum TSMVDeliveryEnum { + + @XmlEnumValue("unicast") + UNICAST("unicast"), + @XmlEnumValue("multicast") + MULTICAST("multicast"), + @XmlEnumValue("both") + BOTH("both"); + private final String value; + + TSMVDeliveryEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TSMVDeliveryEnum fromValue(String v) { + for (TSMVDeliveryEnum c: TSMVDeliveryEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVSettings.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVSettings.java new file mode 100644 index 0000000..84b555f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVSettings.java @@ -0,0 +1,386 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.JAXBElement; +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.XmlElementRef; +import javax.xml.bind.annotation.XmlElementRefs; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tSMVSettings complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSMVSettings">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceSettings">
    + *       <sequence>
    + *         <choice maxOccurs="unbounded">
    + *           <element name="SmpRate">
    + *             <simpleType>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *                 <minExclusive value="0"/>
    + *               </restriction>
    + *             </simpleType>
    + *           </element>
    + *           <element name="SamplesPerSec">
    + *             <simpleType>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *                 <minExclusive value="0"/>
    + *               </restriction>
    + *             </simpleType>
    + *           </element>
    + *           <element name="SecPerSamples">
    + *             <simpleType>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *                 <minExclusive value="0"/>
    + *               </restriction>
    + *             </simpleType>
    + *           </element>
    + *         </choice>
    + *         <element name="McSecurity" type="{http://www.iec.ch/61850/2003/SCL}tMcSecurity" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="svID" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="optFields" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="smpRate" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *       <attribute name="samplesPerSec" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="pdcTimeStamp" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="synchSrcId" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="nofASDU" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsNoDynEnum" default="Fix" />
    + *       <attribute name="kdaParticipant" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSMVSettings", propOrder = { + "smpRateOrSamplesPerSecOrSecPerSamples", + "mcSecurity" +}) +public class TSMVSettings + extends TServiceSettings +{ + + @XmlElementRefs({ + @XmlElementRef(name = "SmpRate", namespace = "http://www.iec.ch/61850/2003/SCL", type = JAXBElement.class, required = false), + @XmlElementRef(name = "SamplesPerSec", namespace = "http://www.iec.ch/61850/2003/SCL", type = JAXBElement.class, required = false), + @XmlElementRef(name = "SecPerSamples", namespace = "http://www.iec.ch/61850/2003/SCL", type = JAXBElement.class, required = false) + }) + protected List> smpRateOrSamplesPerSecOrSecPerSamples; + @XmlElement(name = "McSecurity") + protected TMcSecurity mcSecurity; + @XmlAttribute(name = "svID") + protected TServiceSettingsEnum svID; + @XmlAttribute(name = "optFields") + protected TServiceSettingsEnum optFields; + @XmlAttribute(name = "smpRate") + protected TServiceSettingsEnum smpRate; + @XmlAttribute(name = "samplesPerSec") + protected Boolean samplesPerSec; + @XmlAttribute(name = "pdcTimeStamp") + protected Boolean pdcTimeStamp; + @XmlAttribute(name = "synchSrcId") + protected Boolean synchSrcId; + @XmlAttribute(name = "nofASDU") + protected TServiceSettingsNoDynEnum nofASDU; + @XmlAttribute(name = "kdaParticipant") + protected Boolean kdaParticipant; + + /** + * Gets the value of the smpRateOrSamplesPerSecOrSecPerSamples property. + * + *

    + * 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 set method for the smpRateOrSamplesPerSecOrSecPerSamples property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSmpRateOrSamplesPerSecOrSecPerSamples().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link JAXBElement }{@code <}{@link Long }{@code >} + * {@link JAXBElement }{@code <}{@link Long }{@code >} + * {@link JAXBElement }{@code <}{@link Long }{@code >} + * + * + */ + public List> getSmpRateOrSamplesPerSecOrSecPerSamples() { + if (smpRateOrSamplesPerSecOrSecPerSamples == null) { + smpRateOrSamplesPerSecOrSecPerSamples = new ArrayList>(); + } + return this.smpRateOrSamplesPerSecOrSecPerSamples; + } + + /** + * 获取mcSecurity属性的值。 + * + * @return + * possible object is + * {@link TMcSecurity } + * + */ + public TMcSecurity getMcSecurity() { + return mcSecurity; + } + + /** + * 设置mcSecurity属性的值。 + * + * @param value + * allowed object is + * {@link TMcSecurity } + * + */ + public void setMcSecurity(TMcSecurity value) { + this.mcSecurity = value; + } + + /** + * 获取svID属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getSvID() { + if (svID == null) { + return TServiceSettingsEnum.FIX; + } else { + return svID; + } + } + + /** + * 设置svID属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setSvID(TServiceSettingsEnum value) { + this.svID = value; + } + + /** + * 获取optFields属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getOptFields() { + if (optFields == null) { + return TServiceSettingsEnum.FIX; + } else { + return optFields; + } + } + + /** + * 设置optFields属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setOptFields(TServiceSettingsEnum value) { + this.optFields = value; + } + + /** + * 获取smpRate属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getSmpRate() { + if (smpRate == null) { + return TServiceSettingsEnum.FIX; + } else { + return smpRate; + } + } + + /** + * 设置smpRate属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setSmpRate(TServiceSettingsEnum value) { + this.smpRate = value; + } + + /** + * 获取samplesPerSec属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSamplesPerSec() { + if (samplesPerSec == null) { + return false; + } else { + return samplesPerSec; + } + } + + /** + * 设置samplesPerSec属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSamplesPerSec(Boolean value) { + this.samplesPerSec = value; + } + + /** + * 获取pdcTimeStamp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isPdcTimeStamp() { + if (pdcTimeStamp == null) { + return false; + } else { + return pdcTimeStamp; + } + } + + /** + * 设置pdcTimeStamp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setPdcTimeStamp(Boolean value) { + this.pdcTimeStamp = value; + } + + /** + * 获取synchSrcId属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSynchSrcId() { + if (synchSrcId == null) { + return false; + } else { + return synchSrcId; + } + } + + /** + * 设置synchSrcId属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSynchSrcId(Boolean value) { + this.synchSrcId = value; + } + + /** + * 获取nofASDU属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsNoDynEnum } + * + */ + public TServiceSettingsNoDynEnum getNofASDU() { + if (nofASDU == null) { + return TServiceSettingsNoDynEnum.FIX; + } else { + return nofASDU; + } + } + + /** + * 设置nofASDU属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsNoDynEnum } + * + */ + public void setNofASDU(TServiceSettingsNoDynEnum value) { + this.nofASDU = value; + } + + /** + * 获取kdaParticipant属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isKdaParticipant() { + if (kdaParticipant == null) { + return false; + } else { + return kdaParticipant; + } + } + + /** + * 设置kdaParticipant属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setKdaParticipant(Boolean value) { + this.kdaParticipant = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVsc.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVsc.java new file mode 100644 index 0000000..02e2791 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSMVsc.java @@ -0,0 +1,164 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSMVsc complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSMVsc">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceWithMax">
    + *       <attribute name="delivery" type="{http://www.iec.ch/61850/2003/SCL}tSMVDeliveryEnum" default="multicast" />
    + *       <attribute name="deliveryConf" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="sv" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="rSV" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSMVsc") +public class TSMVsc + extends TServiceWithMax +{ + + @XmlAttribute(name = "delivery") + protected TSMVDeliveryEnum delivery; + @XmlAttribute(name = "deliveryConf") + protected Boolean deliveryConf; + @XmlAttribute(name = "sv") + protected Boolean sv; + @XmlAttribute(name = "rSV") + protected Boolean rsv; + + /** + * 获取delivery属性的值。 + * + * @return + * possible object is + * {@link TSMVDeliveryEnum } + * + */ + public TSMVDeliveryEnum getDelivery() { + if (delivery == null) { + return TSMVDeliveryEnum.MULTICAST; + } else { + return delivery; + } + } + + /** + * 设置delivery属性的值。 + * + * @param value + * allowed object is + * {@link TSMVDeliveryEnum } + * + */ + public void setDelivery(TSMVDeliveryEnum value) { + this.delivery = value; + } + + /** + * 获取deliveryConf属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isDeliveryConf() { + if (deliveryConf == null) { + return false; + } else { + return deliveryConf; + } + } + + /** + * 设置deliveryConf属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setDeliveryConf(Boolean value) { + this.deliveryConf = value; + } + + /** + * 获取sv属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSv() { + if (sv == null) { + return true; + } else { + return sv; + } + } + + /** + * 设置sv属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSv(Boolean value) { + this.sv = 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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSampledValueControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSampledValueControl.java new file mode 100644 index 0000000..0aaf5d5 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSampledValueControl.java @@ -0,0 +1,538 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSampledValueControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSampledValueControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tControlWithIEDName">
    + *       <sequence>
    + *         <element name="SmvOpts">
    + *           <complexType>
    + *             <complexContent>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *                 <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agSmvOpts"/>
    + *               </restriction>
    + *             </complexContent>
    + *           </complexType>
    + *         </element>
    + *         <element name="Protocol" type="{http://www.iec.ch/61850/2003/SCL}tProtocol" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="smvID" use="required" type="{http://www.iec.ch/61850/2003/SCL}tMessageID" />
    + *       <attribute name="multicast" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="smpRate" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="nofASDU" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="smpMod" type="{http://www.iec.ch/61850/2003/SCL}tSmpMod" default="SmpPerPeriod" />
    + *       <attribute name="securityEnable" type="{http://www.iec.ch/61850/2003/SCL}tPredefinedTypeOfSecurityEnum" default="None" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSampledValueControl", propOrder = { + "smvOpts", + "protocol" +}) +public class TSampledValueControl + extends TControlWithIEDName +{ + + @XmlElement(name = "SmvOpts", required = true) + protected TSampledValueControl.SmvOpts smvOpts; + @XmlElement(name = "Protocol") + protected TProtocol protocol; + @XmlAttribute(name = "smvID", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String smvID; + @XmlAttribute(name = "multicast") + protected Boolean multicast; + @XmlAttribute(name = "smpRate", required = true) + @XmlSchemaType(name = "unsignedInt") + protected long smpRate; + @XmlAttribute(name = "nofASDU", required = true) + @XmlSchemaType(name = "unsignedInt") + protected long nofASDU; + @XmlAttribute(name = "smpMod") + protected TSmpMod smpMod; + @XmlAttribute(name = "securityEnable") + protected TPredefinedTypeOfSecurityEnum securityEnable; + + /** + * 获取smvOpts属性的值。 + * + * @return + * possible object is + * {@link TSampledValueControl.SmvOpts } + * + */ + public TSampledValueControl.SmvOpts getSmvOpts() { + return smvOpts; + } + + /** + * 设置smvOpts属性的值。 + * + * @param value + * allowed object is + * {@link TSampledValueControl.SmvOpts } + * + */ + public void setSmvOpts(TSampledValueControl.SmvOpts value) { + this.smvOpts = value; + } + + /** + * 获取protocol属性的值。 + * + * @return + * possible object is + * {@link TProtocol } + * + */ + public TProtocol getProtocol() { + return protocol; + } + + /** + * 设置protocol属性的值。 + * + * @param value + * allowed object is + * {@link TProtocol } + * + */ + public void setProtocol(TProtocol value) { + this.protocol = value; + } + + /** + * 获取smvID属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSmvID() { + return smvID; + } + + /** + * 设置smvID属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSmvID(String value) { + this.smvID = value; + } + + /** + * 获取multicast属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isMulticast() { + if (multicast == null) { + return true; + } else { + return multicast; + } + } + + /** + * 设置multicast属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setMulticast(Boolean value) { + this.multicast = value; + } + + /** + * 获取smpRate属性的值。 + * + */ + public long getSmpRate() { + return smpRate; + } + + /** + * 设置smpRate属性的值。 + * + */ + public void setSmpRate(long value) { + this.smpRate = value; + } + + /** + * 获取nofASDU属性的值。 + * + */ + public long getNofASDU() { + return nofASDU; + } + + /** + * 设置nofASDU属性的值。 + * + */ + public void setNofASDU(long value) { + this.nofASDU = value; + } + + /** + * 获取smpMod属性的值。 + * + * @return + * possible object is + * {@link TSmpMod } + * + */ + public TSmpMod getSmpMod() { + if (smpMod == null) { + return TSmpMod.SMP_PER_PERIOD; + } else { + return smpMod; + } + } + + /** + * 设置smpMod属性的值。 + * + * @param value + * allowed object is + * {@link TSmpMod } + * + */ + public void setSmpMod(TSmpMod value) { + this.smpMod = value; + } + + /** + * 获取securityEnable属性的值。 + * + * @return + * possible object is + * {@link TPredefinedTypeOfSecurityEnum } + * + */ + public TPredefinedTypeOfSecurityEnum getSecurityEnable() { + if (securityEnable == null) { + return TPredefinedTypeOfSecurityEnum.NONE; + } else { + return securityEnable; + } + } + + /** + * 设置securityEnable属性的值。 + * + * @param value + * allowed object is + * {@link TPredefinedTypeOfSecurityEnum } + * + */ + public void setSecurityEnable(TPredefinedTypeOfSecurityEnum value) { + this.securityEnable = value; + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <complexContent>
    +     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    +     *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agSmvOpts"/>
    +     *     </restriction>
    +     *   </complexContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SmvOpts { + + @XmlAttribute(name = "refreshTime") + protected Boolean refreshTime; + @XmlAttribute(name = "sampleSynchronized") + protected Boolean sampleSynchronized; + @XmlAttribute(name = "sampleRate") + protected Boolean sampleRate; + @XmlAttribute(name = "dataSet") + protected Boolean dataSet; + @XmlAttribute(name = "security") + protected Boolean security; + @XmlAttribute(name = "timestamp") + protected Boolean timestamp; + @XmlAttribute(name = "synchSourceId") + protected Boolean synchSourceId; + @XmlAttribute(name = "sampleMode") + protected Boolean sampleMode; + + /** + * 获取refreshTime属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isRefreshTime() { + if (refreshTime == null) { + return false; + } else { + return refreshTime; + } + } + + /** + * 设置refreshTime属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setRefreshTime(Boolean value) { + this.refreshTime = value; + } + + /** + * 获取sampleSynchronized属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSampleSynchronized() { + if (sampleSynchronized == null) { + return true; + } else { + return sampleSynchronized; + } + } + + /** + * 设置sampleSynchronized属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSampleSynchronized(Boolean value) { + this.sampleSynchronized = value; + } + + /** + * 获取sampleRate属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSampleRate() { + if (sampleRate == null) { + return false; + } else { + return sampleRate; + } + } + + /** + * 设置sampleRate属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSampleRate(Boolean value) { + this.sampleRate = value; + } + + /** + * 获取dataSet属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isDataSet() { + if (dataSet == null) { + return false; + } else { + return dataSet; + } + } + + /** + * 设置dataSet属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setDataSet(Boolean value) { + this.dataSet = value; + } + + /** + * 获取security属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSecurity() { + if (security == null) { + return false; + } else { + return security; + } + } + + /** + * 设置security属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSecurity(Boolean value) { + this.security = value; + } + + /** + * 获取timestamp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isTimestamp() { + if (timestamp == null) { + return false; + } else { + return timestamp; + } + } + + /** + * 设置timestamp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setTimestamp(Boolean value) { + this.timestamp = value; + } + + /** + * 获取synchSourceId属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSynchSourceId() { + if (synchSourceId == null) { + return false; + } else { + return synchSourceId; + } + } + + /** + * 设置synchSourceId属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSynchSourceId(Boolean value) { + this.synchSourceId = value; + } + + /** + * 获取sampleMode属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSampleMode() { + if (sampleMode == null) { + return false; + } else { + return sampleMode; + } + } + + /** + * 设置sampleMode属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSampleMode(Boolean value) { + this.sampleMode = value; + } + + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSclFileUUIDReference.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSclFileUUIDReference.java new file mode 100644 index 0000000..440445e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSclFileUUIDReference.java @@ -0,0 +1,220 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.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; + + +/** + * Definition of a reference to an SCL file by its UUID and/or File name with an associated version revision, corresponding to the definition of an SCL file header + * + *

    tSclFileUUIDReference complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSclFileUUIDReference">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <attribute name="fileUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <attribute name="fileName" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="fileType" use="required" type="{http://www.iec.ch/61850/2003/SCL}tSCLFileType" />
    + *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="revision" use="required" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <attribute name="when" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSclFileUUIDReference") +@XmlSeeAlso({ + TMinRequestedSCDFile.class +}) +public class TSclFileUUIDReference + extends TUnNaming +{ + + @XmlAttribute(name = "fileUuid") + protected String fileUuid; + @XmlAttribute(name = "fileName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String fileName; + @XmlAttribute(name = "fileType", required = true) + protected String fileType; + @XmlAttribute(name = "version", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String version; + @XmlAttribute(name = "revision", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String revision; + @XmlAttribute(name = "when") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String when; + + /** + * 获取fileUuid属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getFileUuid() { + return fileUuid; + } + + /** + * 设置fileUuid属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFileUuid(String value) { + this.fileUuid = value; + } + + /** + * 获取fileName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getFileName() { + return fileName; + } + + /** + * 设置fileName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFileName(String value) { + this.fileName = value; + } + + /** + * 获取fileType属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getFileType() { + return fileType; + } + + /** + * 设置fileType属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFileType(String value) { + this.fileType = value; + } + + /** + * 获取version属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + 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() { + return revision; + } + + /** + * 设置revision属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRevision(String value) { + this.revision = value; + } + + /** + * 获取when属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getWhen() { + return when; + } + + /** + * 设置when属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWhen(String value) { + this.when = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSecurity.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSecurity.java new file mode 100644 index 0000000..4a73477 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSecurity.java @@ -0,0 +1,100 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSecurity complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSecurity">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="ACSEAuthentication" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="E2ESecurity" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSecurity") +public class TSecurity { + + @XmlAttribute(name = "ACSEAuthentication") + protected Boolean acseAuthentication; + @XmlAttribute(name = "E2ESecurity") + protected Boolean e2ESecurity; + + /** + * 获取acseAuthentication属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isACSEAuthentication() { + if (acseAuthentication == null) { + return false; + } else { + return acseAuthentication; + } + } + + /** + * 设置acseAuthentication属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setACSEAuthentication(Boolean value) { + this.acseAuthentication = value; + } + + /** + * 获取e2ESecurity属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isE2ESecurity() { + if (e2ESecurity == null) { + return false; + } else { + return e2ESecurity; + } + } + + /** + * 设置e2ESecurity属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setE2ESecurity(Boolean value) { + this.e2ESecurity = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServer.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServer.java new file mode 100644 index 0000000..601a180 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServer.java @@ -0,0 +1,357 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServer complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServer">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <sequence>
    + *         <element name="Authentication">
    + *           <complexType>
    + *             <complexContent>
    + *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *                 <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agAuthentication"/>
    + *               </restriction>
    + *             </complexContent>
    + *           </complexType>
    + *         </element>
    + *         <element name="LDevice" type="{http://www.iec.ch/61850/2003/SCL}tLDevice" maxOccurs="unbounded"/>
    + *         <element name="Association" type="{http://www.iec.ch/61850/2003/SCL}tAssociation" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="timeout" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" default="30" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServer", propOrder = { + "authentication", + "lDevice", + "association" +}) +public class TServer + extends TUnNaming +{ + + @XmlElement(name = "Authentication", required = true) + protected TServer.Authentication authentication; + @XmlElement(name = "LDevice", required = true) + protected List lDevice; + @XmlElement(name = "Association") + protected List association; + @XmlAttribute(name = "timeout") + @XmlSchemaType(name = "unsignedInt") + protected Long timeout; + + /** + * 获取authentication属性的值。 + * + * @return + * possible object is + * {@link TServer.Authentication } + * + */ + public TServer.Authentication getAuthentication() { + return authentication; + } + + /** + * 设置authentication属性的值。 + * + * @param value + * allowed object is + * {@link TServer.Authentication } + * + */ + public void setAuthentication(TServer.Authentication value) { + this.authentication = value; + } + + /** + * Gets the value of the lDevice property. + * + *

    + * 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 set method for the lDevice property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getLDevice().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TLDevice } + * + * + */ + public List getLDevice() { + if (lDevice == null) { + lDevice = new ArrayList(); + } + return this.lDevice; + } + + /** + * Gets the value of the association property. + * + *

    + * 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 set method for the association property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getAssociation().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TAssociation } + * + * + */ + public List getAssociation() { + if (association == null) { + association = new ArrayList(); + } + return this.association; + } + + /** + * 获取timeout属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public long getTimeout() { + if (timeout == null) { + return 30L; + } else { + return timeout; + } + } + + /** + * 设置timeout属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setTimeout(Long value) { + this.timeout = value; + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <complexContent>
    +     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    +     *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agAuthentication"/>
    +     *     </restriction>
    +     *   </complexContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Authentication { + + @XmlAttribute(name = "none") + protected Boolean none; + @XmlAttribute(name = "password") + protected Boolean password; + @XmlAttribute(name = "weak") + protected Boolean weak; + @XmlAttribute(name = "strong") + protected Boolean strong; + @XmlAttribute(name = "certificate") + protected Boolean certificate; + + /** + * 获取none属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isNone() { + if (none == null) { + return true; + } else { + return none; + } + } + + /** + * 设置none属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setNone(Boolean value) { + this.none = value; + } + + /** + * 获取password属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isPassword() { + if (password == null) { + return false; + } else { + return password; + } + } + + /** + * 设置password属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setPassword(Boolean value) { + this.password = value; + } + + /** + * 获取weak属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isWeak() { + if (weak == null) { + return false; + } else { + return weak; + } + } + + /** + * 设置weak属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setWeak(Boolean value) { + this.weak = value; + } + + /** + * 获取strong属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isStrong() { + if (strong == null) { + return false; + } else { + return strong; + } + } + + /** + * 设置strong属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setStrong(Boolean value) { + this.strong = value; + } + + /** + * 获取certificate属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isCertificate() { + if (certificate == null) { + return false; + } else { + return certificate; + } + } + + /** + * 设置certificate属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setCertificate(Boolean value) { + this.certificate = value; + } + + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServerAt.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServerAt.java new file mode 100644 index 0000000..821bda9 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServerAt.java @@ -0,0 +1,98 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServerAt complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServerAt">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <attribute name="apName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tAccessPointName" />
    + *       <attribute name="apUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServerAt") +public class TServerAt + extends TUnNaming +{ + + @XmlAttribute(name = "apName", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String apName; + @XmlAttribute(name = "apUuid") + protected String apUuid; + + /** + * 获取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; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceConfReportControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceConfReportControl.java new file mode 100644 index 0000000..396fd18 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceConfReportControl.java @@ -0,0 +1,142 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tServiceConfReportControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceConfReportControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceWithMax">
    + *       <attribute name="bufMode" default="both">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *             <enumeration value="unbuffered"/>
    + *             <enumeration value="buffered"/>
    + *             <enumeration value="both"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="bufConf" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="maxBuf" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceConfReportControl") +public class TServiceConfReportControl + extends TServiceWithMax +{ + + @XmlAttribute(name = "bufMode") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String bufMode; + @XmlAttribute(name = "bufConf") + protected Boolean bufConf; + @XmlAttribute(name = "maxBuf") + @XmlSchemaType(name = "unsignedInt") + protected Long maxBuf; + + /** + * 获取bufMode属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getBufMode() { + if (bufMode == null) { + return "both"; + } else { + return bufMode; + } + } + + /** + * 设置bufMode属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setBufMode(String value) { + this.bufMode = value; + } + + /** + * 获取bufConf属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isBufConf() { + if (bufConf == null) { + return false; + } else { + return bufConf; + } + } + + /** + * 设置bufConf属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setBufConf(Boolean value) { + this.bufConf = value; + } + + /** + * 获取maxBuf属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public Long getMaxBuf() { + return maxBuf; + } + + /** + * 设置maxBuf属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setMaxBuf(Long value) { + this.maxBuf = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceForConfDataSet.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceForConfDataSet.java new file mode 100644 index 0000000..af6410a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceForConfDataSet.java @@ -0,0 +1,71 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceForConfDataSet complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceForConfDataSet">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceWithMaxAndMaxAttributes">
    + *       <attribute name="modify" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceForConfDataSet") +public class TServiceForConfDataSet + extends TServiceWithMaxAndMaxAttributes +{ + + @XmlAttribute(name = "modify") + protected Boolean modify; + + /** + * 获取modify属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isModify() { + if (modify == null) { + return true; + } else { + return modify; + } + } + + /** + * 设置modify属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setModify(Boolean value) { + this.modify = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettings.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettings.java new file mode 100644 index 0000000..8e23f2c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettings.java @@ -0,0 +1,107 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceSettings complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceSettings">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="cbName" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsNoDynEnum" default="Fix" />
    + *       <attribute name="datSet" type="{http://www.iec.ch/61850/2003/SCL}tServiceSettingsEnum" default="Fix" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceSettings") +@XmlSeeAlso({ + TReportSettings.class, + TLogSettings.class, + TGSESettings.class, + TSMVSettings.class +}) +public abstract class TServiceSettings { + + @XmlAttribute(name = "cbName") + protected TServiceSettingsNoDynEnum cbName; + @XmlAttribute(name = "datSet") + protected TServiceSettingsEnum datSet; + + /** + * 获取cbName属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsNoDynEnum } + * + */ + public TServiceSettingsNoDynEnum getCbName() { + if (cbName == null) { + return TServiceSettingsNoDynEnum.FIX; + } else { + return cbName; + } + } + + /** + * 设置cbName属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsNoDynEnum } + * + */ + public void setCbName(TServiceSettingsNoDynEnum value) { + this.cbName = value; + } + + /** + * 获取datSet属性的值。 + * + * @return + * possible object is + * {@link TServiceSettingsEnum } + * + */ + public TServiceSettingsEnum getDatSet() { + if (datSet == null) { + return TServiceSettingsEnum.FIX; + } else { + return datSet; + } + } + + /** + * 设置datSet属性的值。 + * + * @param value + * allowed object is + * {@link TServiceSettingsEnum } + * + */ + public void setDatSet(TServiceSettingsEnum value) { + this.datSet = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsEnum.java new file mode 100644 index 0000000..ada9720 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsEnum.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceSettingsEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tServiceSettingsEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="Dyn"/>
    + *     <enumeration value="Conf"/>
    + *     <enumeration value="Fix"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tServiceSettingsEnum") +@XmlEnum +public enum TServiceSettingsEnum { + + @XmlEnumValue("Dyn") + DYN("Dyn"), + @XmlEnumValue("Conf") + CONF("Conf"), + @XmlEnumValue("Fix") + FIX("Fix"); + private final String value; + + TServiceSettingsEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TServiceSettingsEnum fromValue(String v) { + for (TServiceSettingsEnum c: TServiceSettingsEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsNoDynEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsNoDynEnum.java new file mode 100644 index 0000000..7e47166 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceSettingsNoDynEnum.java @@ -0,0 +1,58 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceSettingsNoDynEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tServiceSettingsNoDynEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="Conf"/>
    + *     <enumeration value="Fix"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tServiceSettingsNoDynEnum") +@XmlEnum +public enum TServiceSettingsNoDynEnum { + + @XmlEnumValue("Conf") + CONF("Conf"), + @XmlEnumValue("Fix") + FIX("Fix"); + private final String value; + + TServiceSettingsNoDynEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TServiceSettingsNoDynEnum fromValue(String v) { + for (TServiceSettingsNoDynEnum c: TServiceSettingsNoDynEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceType.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceType.java new file mode 100644 index 0000000..0797735 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceType.java @@ -0,0 +1,62 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceType的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tServiceType">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="Poll"/>
    + *     <enumeration value="Report"/>
    + *     <enumeration value="GOOSE"/>
    + *     <enumeration value="SMV"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tServiceType") +@XmlEnum +public enum TServiceType { + + @XmlEnumValue("Poll") + POLL("Poll"), + @XmlEnumValue("Report") + REPORT("Report"), + GOOSE("GOOSE"), + SMV("SMV"); + private final String value; + + TServiceType(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TServiceType fromValue(String v) { + for (TServiceType c: TServiceType.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMax.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMax.java new file mode 100644 index 0000000..68de125 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMax.java @@ -0,0 +1,67 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tServiceWithMax complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceWithMax">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="max" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceWithMax") +@XmlSeeAlso({ + TServiceConfReportControl.class, + TServiceWithMaxAndModify.class, + TServiceWithMaxAndMaxAttributes.class, + TGOOSEcapabilities.class, + TSMVsc.class +}) +public class TServiceWithMax { + + @XmlAttribute(name = "max", required = true) + @XmlSchemaType(name = "unsignedInt") + protected long max; + + /** + * 获取max属性的值。 + * + */ + public long getMax() { + return max; + } + + /** + * 设置max属性的值。 + * + */ + public void setMax(long value) { + this.max = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndMaxAttributes.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndMaxAttributes.java new file mode 100644 index 0000000..3c67008 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndMaxAttributes.java @@ -0,0 +1,77 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceWithMaxAndMaxAttributes complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceWithMaxAndMaxAttributes">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceWithMax">
    + *       <attribute name="maxAttributes">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *             <minExclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceWithMaxAndMaxAttributes") +@XmlSeeAlso({ + TServiceForConfDataSet.class +}) +public class TServiceWithMaxAndMaxAttributes + extends TServiceWithMax +{ + + @XmlAttribute(name = "maxAttributes") + protected Long maxAttributes; + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndModify.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndModify.java new file mode 100644 index 0000000..8cb0931 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxAndModify.java @@ -0,0 +1,71 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceWithMaxAndModify complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceWithMaxAndModify">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceWithMax">
    + *       <attribute name="modify" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceWithMaxAndModify") +public class TServiceWithMaxAndModify + extends TServiceWithMax +{ + + @XmlAttribute(name = "modify") + protected Boolean modify; + + /** + * 获取modify属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isModify() { + if (modify == null) { + return true; + } else { + return modify; + } + } + + /** + * 设置modify属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setModify(Boolean value) { + this.modify = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxNonZero.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxNonZero.java new file mode 100644 index 0000000..1813d66 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithMaxNonZero.java @@ -0,0 +1,63 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tServiceWithMaxNonZero complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceWithMaxNonZero">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="max" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *             <minExclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceWithMaxNonZero") +public class TServiceWithMaxNonZero { + + @XmlAttribute(name = "max", required = true) + protected long max; + + /** + * 获取max属性的值。 + * + */ + public long getMax() { + return max; + } + + /** + * 设置max属性的值。 + * + */ + public void setMax(long value) { + this.max = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithOptionalMax.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithOptionalMax.java new file mode 100644 index 0000000..9658d5f --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceWithOptionalMax.java @@ -0,0 +1,67 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tServiceWithOptionalMax complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceWithOptionalMax">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="max" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceWithOptionalMax") +public class TServiceWithOptionalMax { + + @XmlAttribute(name = "max") + @XmlSchemaType(name = "unsignedInt") + protected Long max; + + /** + * 获取max属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public Long getMax() { + return max; + } + + /** + * 设置max属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setMax(Long value) { + this.max = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceYesNo.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceYesNo.java new file mode 100644 index 0000000..80045e2 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServiceYesNo.java @@ -0,0 +1,46 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSeeAlso; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tServiceYesNo complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServiceYesNo">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServiceYesNo") +@XmlSeeAlso({ + TFileHandling.class, + TTimeSyncProt.class, + TCommProt.class, + TSCSM.class, + com.njcn.gather.icd.mapping.infrastructure.parser.generated.TSettingGroups.SGEdit.class, + com.njcn.gather.icd.mapping.infrastructure.parser.generated.TSettingGroups.ConfSG.class +}) +public class TServiceYesNo { + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServices.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServices.java new file mode 100644 index 0000000..4042b40 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TServices.java @@ -0,0 +1,1059 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; +import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tServices complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tServices">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <all>
    + *         <element name="DynAssociation" type="{http://www.iec.ch/61850/2003/SCL}tServiceWithOptionalMax" minOccurs="0"/>
    + *         <element name="SettingGroups" type="{http://www.iec.ch/61850/2003/SCL}tSettingGroups" minOccurs="0"/>
    + *         <element name="GetDirectory" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="GetDataObjectDefinition" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="DataObjectDirectory" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="GetDataSetValue" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="SetDataSetValue" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="DataSetDirectory" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="ConfDataSet" type="{http://www.iec.ch/61850/2003/SCL}tServiceForConfDataSet" minOccurs="0"/>
    + *         <element name="DynDataSet" type="{http://www.iec.ch/61850/2003/SCL}tServiceWithMaxAndMaxAttributes" minOccurs="0"/>
    + *         <element name="ReadWrite" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="TimerActivatedControl" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="ConfReportControl" type="{http://www.iec.ch/61850/2003/SCL}tServiceConfReportControl" minOccurs="0"/>
    + *         <element name="GetCBValues" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="ConfLogControl" type="{http://www.iec.ch/61850/2003/SCL}tServiceWithMaxNonZero" minOccurs="0"/>
    + *         <element name="ReportSettings" type="{http://www.iec.ch/61850/2003/SCL}tReportSettings" minOccurs="0"/>
    + *         <element name="LogSettings" type="{http://www.iec.ch/61850/2003/SCL}tLogSettings" minOccurs="0"/>
    + *         <element name="GSESettings" type="{http://www.iec.ch/61850/2003/SCL}tGSESettings" minOccurs="0"/>
    + *         <element name="SMVSettings" type="{http://www.iec.ch/61850/2003/SCL}tSMVSettings" minOccurs="0"/>
    + *         <element name="GSEDir" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="GOOSE" type="{http://www.iec.ch/61850/2003/SCL}tGOOSEcapabilities" minOccurs="0"/>
    + *         <element name="GSSE" type="{http://www.iec.ch/61850/2003/SCL}tServiceWithMax" minOccurs="0"/>
    + *         <element name="SMVsc" type="{http://www.iec.ch/61850/2003/SCL}tSMVsc" minOccurs="0"/>
    + *         <element name="FileHandling" type="{http://www.iec.ch/61850/2003/SCL}tFileHandling" minOccurs="0"/>
    + *         <element name="ConfLNs" type="{http://www.iec.ch/61850/2003/SCL}tConfLNs" minOccurs="0"/>
    + *         <element name="ClientServices" type="{http://www.iec.ch/61850/2003/SCL}tClientServices" minOccurs="0"/>
    + *         <element name="ConfLdName" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *         <element name="SupSubscription" type="{http://www.iec.ch/61850/2003/SCL}tSupSubscription" minOccurs="0"/>
    + *         <element name="ConfSigRef" type="{http://www.iec.ch/61850/2003/SCL}tServiceWithMaxNonZero" minOccurs="0"/>
    + *         <element name="ValueHandling" type="{http://www.iec.ch/61850/2003/SCL}tValueHandling" minOccurs="0"/>
    + *         <element name="RedProt" type="{http://www.iec.ch/61850/2003/SCL}tRedProt" minOccurs="0"/>
    + *         <element name="TimeSyncProt" type="{http://www.iec.ch/61850/2003/SCL}tTimeSyncProt" minOccurs="0"/>
    + *         <element name="CommProt" type="{http://www.iec.ch/61850/2003/SCL}tCommProt" minOccurs="0"/>
    + *         <element name="SCSM" type="{http://www.iec.ch/61850/2003/SCL}tSCSM" minOccurs="0"/>
    + *         <element name="Security" type="{http://www.iec.ch/61850/2003/SCL}tSecurity" minOccurs="0"/>
    + *         <element name="MultiAPPerSubNet" type="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo" minOccurs="0"/>
    + *       </all>
    + *       <attribute name="nameLength" default="32">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}token">
    + *             <pattern value="32"/>
    + *             <pattern value="64"/>
    + *             <pattern value="6[5-9]"/>
    + *             <pattern value="[7-9]\d"/>
    + *             <pattern value="[1-9]\d\d+"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tServices", propOrder = { + +}) +public class TServices { + + @XmlElement(name = "DynAssociation") + protected TServiceWithOptionalMax dynAssociation; + @XmlElement(name = "SettingGroups") + protected TSettingGroups settingGroups; + @XmlElement(name = "GetDirectory") + protected TServiceYesNo getDirectory; + @XmlElement(name = "GetDataObjectDefinition") + protected TServiceYesNo getDataObjectDefinition; + @XmlElement(name = "DataObjectDirectory") + protected TServiceYesNo dataObjectDirectory; + @XmlElement(name = "GetDataSetValue") + protected TServiceYesNo getDataSetValue; + @XmlElement(name = "SetDataSetValue") + protected TServiceYesNo setDataSetValue; + @XmlElement(name = "DataSetDirectory") + protected TServiceYesNo dataSetDirectory; + @XmlElement(name = "ConfDataSet") + protected TServiceForConfDataSet confDataSet; + @XmlElement(name = "DynDataSet") + protected TServiceWithMaxAndMaxAttributes dynDataSet; + @XmlElement(name = "ReadWrite") + protected TServiceYesNo readWrite; + @XmlElement(name = "TimerActivatedControl") + protected TServiceYesNo timerActivatedControl; + @XmlElement(name = "ConfReportControl") + protected TServiceConfReportControl confReportControl; + @XmlElement(name = "GetCBValues") + protected TServiceYesNo getCBValues; + @XmlElement(name = "ConfLogControl") + protected TServiceWithMaxNonZero confLogControl; + @XmlElement(name = "ReportSettings") + protected TReportSettings reportSettings; + @XmlElement(name = "LogSettings") + protected TLogSettings logSettings; + @XmlElement(name = "GSESettings") + protected TGSESettings gseSettings; + @XmlElement(name = "SMVSettings") + protected TSMVSettings smvSettings; + @XmlElement(name = "GSEDir") + protected TServiceYesNo gseDir; + @XmlElement(name = "GOOSE") + protected TGOOSEcapabilities goose; + @XmlElement(name = "GSSE") + protected TServiceWithMax gsse; + @XmlElement(name = "SMVsc") + protected TSMVsc smVsc; + @XmlElement(name = "FileHandling") + protected TFileHandling fileHandling; + @XmlElement(name = "ConfLNs") + protected TConfLNs confLNs; + @XmlElement(name = "ClientServices") + protected TClientServices clientServices; + @XmlElement(name = "ConfLdName") + protected TServiceYesNo confLdName; + @XmlElement(name = "SupSubscription") + protected TSupSubscription supSubscription; + @XmlElement(name = "ConfSigRef") + protected TServiceWithMaxNonZero confSigRef; + @XmlElement(name = "ValueHandling") + protected TValueHandling valueHandling; + @XmlElement(name = "RedProt") + protected TRedProt redProt; + @XmlElement(name = "TimeSyncProt") + protected TTimeSyncProt timeSyncProt; + @XmlElement(name = "CommProt") + protected TCommProt commProt; + @XmlElement(name = "SCSM") + protected TSCSM scsm; + @XmlElement(name = "Security") + protected TSecurity security; + @XmlElement(name = "MultiAPPerSubNet") + protected TServiceYesNo multiAPPerSubNet; + @XmlAttribute(name = "nameLength") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + protected String nameLength; + + /** + * 获取dynAssociation属性的值。 + * + * @return + * possible object is + * {@link TServiceWithOptionalMax } + * + */ + public TServiceWithOptionalMax getDynAssociation() { + return dynAssociation; + } + + /** + * 设置dynAssociation属性的值。 + * + * @param value + * allowed object is + * {@link TServiceWithOptionalMax } + * + */ + public void setDynAssociation(TServiceWithOptionalMax value) { + this.dynAssociation = value; + } + + /** + * 获取settingGroups属性的值。 + * + * @return + * possible object is + * {@link TSettingGroups } + * + */ + public TSettingGroups getSettingGroups() { + return settingGroups; + } + + /** + * 设置settingGroups属性的值。 + * + * @param value + * allowed object is + * {@link TSettingGroups } + * + */ + public void setSettingGroups(TSettingGroups value) { + this.settingGroups = value; + } + + /** + * 获取getDirectory属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getGetDirectory() { + return getDirectory; + } + + /** + * 设置getDirectory属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setGetDirectory(TServiceYesNo value) { + this.getDirectory = value; + } + + /** + * 获取getDataObjectDefinition属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getGetDataObjectDefinition() { + return getDataObjectDefinition; + } + + /** + * 设置getDataObjectDefinition属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setGetDataObjectDefinition(TServiceYesNo value) { + this.getDataObjectDefinition = value; + } + + /** + * 获取dataObjectDirectory属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getDataObjectDirectory() { + return dataObjectDirectory; + } + + /** + * 设置dataObjectDirectory属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setDataObjectDirectory(TServiceYesNo value) { + this.dataObjectDirectory = value; + } + + /** + * 获取getDataSetValue属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getGetDataSetValue() { + return getDataSetValue; + } + + /** + * 设置getDataSetValue属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setGetDataSetValue(TServiceYesNo value) { + this.getDataSetValue = value; + } + + /** + * 获取setDataSetValue属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getSetDataSetValue() { + return setDataSetValue; + } + + /** + * 设置setDataSetValue属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setSetDataSetValue(TServiceYesNo value) { + this.setDataSetValue = value; + } + + /** + * 获取dataSetDirectory属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getDataSetDirectory() { + return dataSetDirectory; + } + + /** + * 设置dataSetDirectory属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setDataSetDirectory(TServiceYesNo value) { + this.dataSetDirectory = value; + } + + /** + * 获取confDataSet属性的值。 + * + * @return + * possible object is + * {@link TServiceForConfDataSet } + * + */ + public TServiceForConfDataSet getConfDataSet() { + return confDataSet; + } + + /** + * 设置confDataSet属性的值。 + * + * @param value + * allowed object is + * {@link TServiceForConfDataSet } + * + */ + public void setConfDataSet(TServiceForConfDataSet value) { + this.confDataSet = value; + } + + /** + * 获取dynDataSet属性的值。 + * + * @return + * possible object is + * {@link TServiceWithMaxAndMaxAttributes } + * + */ + public TServiceWithMaxAndMaxAttributes getDynDataSet() { + return dynDataSet; + } + + /** + * 设置dynDataSet属性的值。 + * + * @param value + * allowed object is + * {@link TServiceWithMaxAndMaxAttributes } + * + */ + public void setDynDataSet(TServiceWithMaxAndMaxAttributes value) { + this.dynDataSet = value; + } + + /** + * 获取readWrite属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getReadWrite() { + return readWrite; + } + + /** + * 设置readWrite属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setReadWrite(TServiceYesNo value) { + this.readWrite = value; + } + + /** + * 获取timerActivatedControl属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getTimerActivatedControl() { + return timerActivatedControl; + } + + /** + * 设置timerActivatedControl属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setTimerActivatedControl(TServiceYesNo value) { + this.timerActivatedControl = value; + } + + /** + * 获取confReportControl属性的值。 + * + * @return + * possible object is + * {@link TServiceConfReportControl } + * + */ + public TServiceConfReportControl getConfReportControl() { + return confReportControl; + } + + /** + * 设置confReportControl属性的值。 + * + * @param value + * allowed object is + * {@link TServiceConfReportControl } + * + */ + public void setConfReportControl(TServiceConfReportControl value) { + this.confReportControl = value; + } + + /** + * 获取getCBValues属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getGetCBValues() { + return getCBValues; + } + + /** + * 设置getCBValues属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setGetCBValues(TServiceYesNo value) { + this.getCBValues = value; + } + + /** + * 获取confLogControl属性的值。 + * + * @return + * possible object is + * {@link TServiceWithMaxNonZero } + * + */ + public TServiceWithMaxNonZero getConfLogControl() { + return confLogControl; + } + + /** + * 设置confLogControl属性的值。 + * + * @param value + * allowed object is + * {@link TServiceWithMaxNonZero } + * + */ + public void setConfLogControl(TServiceWithMaxNonZero value) { + this.confLogControl = value; + } + + /** + * 获取reportSettings属性的值。 + * + * @return + * possible object is + * {@link TReportSettings } + * + */ + public TReportSettings getReportSettings() { + return reportSettings; + } + + /** + * 设置reportSettings属性的值。 + * + * @param value + * allowed object is + * {@link TReportSettings } + * + */ + public void setReportSettings(TReportSettings value) { + this.reportSettings = value; + } + + /** + * 获取logSettings属性的值。 + * + * @return + * possible object is + * {@link TLogSettings } + * + */ + public TLogSettings getLogSettings() { + return logSettings; + } + + /** + * 设置logSettings属性的值。 + * + * @param value + * allowed object is + * {@link TLogSettings } + * + */ + public void setLogSettings(TLogSettings value) { + this.logSettings = value; + } + + /** + * 获取gseSettings属性的值。 + * + * @return + * possible object is + * {@link TGSESettings } + * + */ + public TGSESettings getGSESettings() { + return gseSettings; + } + + /** + * 设置gseSettings属性的值。 + * + * @param value + * allowed object is + * {@link TGSESettings } + * + */ + public void setGSESettings(TGSESettings value) { + this.gseSettings = value; + } + + /** + * 获取smvSettings属性的值。 + * + * @return + * possible object is + * {@link TSMVSettings } + * + */ + public TSMVSettings getSMVSettings() { + return smvSettings; + } + + /** + * 设置smvSettings属性的值。 + * + * @param value + * allowed object is + * {@link TSMVSettings } + * + */ + public void setSMVSettings(TSMVSettings value) { + this.smvSettings = value; + } + + /** + * 获取gseDir属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getGSEDir() { + return gseDir; + } + + /** + * 设置gseDir属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setGSEDir(TServiceYesNo value) { + this.gseDir = value; + } + + /** + * 获取goose属性的值。 + * + * @return + * possible object is + * {@link TGOOSEcapabilities } + * + */ + public TGOOSEcapabilities getGOOSE() { + return goose; + } + + /** + * 设置goose属性的值。 + * + * @param value + * allowed object is + * {@link TGOOSEcapabilities } + * + */ + public void setGOOSE(TGOOSEcapabilities value) { + this.goose = value; + } + + /** + * 获取gsse属性的值。 + * + * @return + * possible object is + * {@link TServiceWithMax } + * + */ + public TServiceWithMax getGSSE() { + return gsse; + } + + /** + * 设置gsse属性的值。 + * + * @param value + * allowed object is + * {@link TServiceWithMax } + * + */ + public void setGSSE(TServiceWithMax value) { + this.gsse = value; + } + + /** + * 获取smVsc属性的值。 + * + * @return + * possible object is + * {@link TSMVsc } + * + */ + public TSMVsc getSMVsc() { + return smVsc; + } + + /** + * 设置smVsc属性的值。 + * + * @param value + * allowed object is + * {@link TSMVsc } + * + */ + public void setSMVsc(TSMVsc value) { + this.smVsc = value; + } + + /** + * 获取fileHandling属性的值。 + * + * @return + * possible object is + * {@link TFileHandling } + * + */ + public TFileHandling getFileHandling() { + return fileHandling; + } + + /** + * 设置fileHandling属性的值。 + * + * @param value + * allowed object is + * {@link TFileHandling } + * + */ + public void setFileHandling(TFileHandling value) { + this.fileHandling = value; + } + + /** + * 获取confLNs属性的值。 + * + * @return + * possible object is + * {@link TConfLNs } + * + */ + public TConfLNs getConfLNs() { + return confLNs; + } + + /** + * 设置confLNs属性的值。 + * + * @param value + * allowed object is + * {@link TConfLNs } + * + */ + public void setConfLNs(TConfLNs value) { + this.confLNs = value; + } + + /** + * 获取clientServices属性的值。 + * + * @return + * possible object is + * {@link TClientServices } + * + */ + public TClientServices getClientServices() { + return clientServices; + } + + /** + * 设置clientServices属性的值。 + * + * @param value + * allowed object is + * {@link TClientServices } + * + */ + public void setClientServices(TClientServices value) { + this.clientServices = value; + } + + /** + * 获取confLdName属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getConfLdName() { + return confLdName; + } + + /** + * 设置confLdName属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setConfLdName(TServiceYesNo value) { + this.confLdName = value; + } + + /** + * 获取supSubscription属性的值。 + * + * @return + * possible object is + * {@link TSupSubscription } + * + */ + public TSupSubscription getSupSubscription() { + return supSubscription; + } + + /** + * 设置supSubscription属性的值。 + * + * @param value + * allowed object is + * {@link TSupSubscription } + * + */ + public void setSupSubscription(TSupSubscription value) { + this.supSubscription = value; + } + + /** + * 获取confSigRef属性的值。 + * + * @return + * possible object is + * {@link TServiceWithMaxNonZero } + * + */ + public TServiceWithMaxNonZero getConfSigRef() { + return confSigRef; + } + + /** + * 设置confSigRef属性的值。 + * + * @param value + * allowed object is + * {@link TServiceWithMaxNonZero } + * + */ + public void setConfSigRef(TServiceWithMaxNonZero value) { + this.confSigRef = value; + } + + /** + * 获取valueHandling属性的值。 + * + * @return + * possible object is + * {@link TValueHandling } + * + */ + public TValueHandling getValueHandling() { + return valueHandling; + } + + /** + * 设置valueHandling属性的值。 + * + * @param value + * allowed object is + * {@link TValueHandling } + * + */ + public void setValueHandling(TValueHandling value) { + this.valueHandling = value; + } + + /** + * 获取redProt属性的值。 + * + * @return + * possible object is + * {@link TRedProt } + * + */ + public TRedProt getRedProt() { + return redProt; + } + + /** + * 设置redProt属性的值。 + * + * @param value + * allowed object is + * {@link TRedProt } + * + */ + public void setRedProt(TRedProt value) { + this.redProt = value; + } + + /** + * 获取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; + } + + /** + * 获取commProt属性的值。 + * + * @return + * possible object is + * {@link TCommProt } + * + */ + public TCommProt getCommProt() { + return commProt; + } + + /** + * 设置commProt属性的值。 + * + * @param value + * allowed object is + * {@link TCommProt } + * + */ + public void setCommProt(TCommProt value) { + this.commProt = value; + } + + /** + * 获取scsm属性的值。 + * + * @return + * possible object is + * {@link TSCSM } + * + */ + public TSCSM getSCSM() { + return scsm; + } + + /** + * 设置scsm属性的值。 + * + * @param value + * allowed object is + * {@link TSCSM } + * + */ + public void setSCSM(TSCSM value) { + this.scsm = 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; + } + + /** + * 获取multiAPPerSubNet属性的值。 + * + * @return + * possible object is + * {@link TServiceYesNo } + * + */ + public TServiceYesNo getMultiAPPerSubNet() { + return multiAPPerSubNet; + } + + /** + * 设置multiAPPerSubNet属性的值。 + * + * @param value + * allowed object is + * {@link TServiceYesNo } + * + */ + public void setMultiAPPerSubNet(TServiceYesNo value) { + this.multiAPPerSubNet = value; + } + + /** + * 获取nameLength属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getNameLength() { + if (nameLength == null) { + return "32"; + } else { + return nameLength; + } + } + + /** + * 设置nameLength属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNameLength(String value) { + this.nameLength = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingControl.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingControl.java new file mode 100644 index 0000000..0e0cc35 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingControl.java @@ -0,0 +1,132 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tSettingControl complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSettingControl">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <attribute name="numOfSGs" use="required">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *             <minInclusive value="1"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="actSG" default="1">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedInt">
    + *             <minInclusive value="1"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="resvTms" type="{http://www.w3.org/2001/XMLSchema}unsignedShort" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSettingControl") +public class TSettingControl + extends TUnNaming +{ + + @XmlAttribute(name = "numOfSGs", required = true) + protected long numOfSGs; + @XmlAttribute(name = "actSG") + protected Long actSG; + @XmlAttribute(name = "resvTms") + @XmlSchemaType(name = "unsignedShort") + protected Integer resvTms; + + /** + * 获取numOfSGs属性的值。 + * + */ + public long getNumOfSGs() { + return numOfSGs; + } + + /** + * 设置numOfSGs属性的值。 + * + */ + public void setNumOfSGs(long value) { + this.numOfSGs = value; + } + + /** + * 获取actSG属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public long getActSG() { + if (actSG == null) { + return 1L; + } else { + return actSG; + } + } + + /** + * 设置actSG属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setActSG(Long value) { + this.actSG = value; + } + + /** + * 获取resvTms属性的值。 + * + * @return + * possible object is + * {@link Integer } + * + */ + public Integer getResvTms() { + return resvTms; + } + + /** + * 设置resvTms属性的值。 + * + * @param value + * allowed object is + * {@link Integer } + * + */ + public void setResvTms(Integer value) { + this.resvTms = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingGroups.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingGroups.java new file mode 100644 index 0000000..5177474 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSettingGroups.java @@ -0,0 +1,227 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSettingGroups complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSettingGroups">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <all>
    + *         <element name="SGEdit" minOccurs="0">
    + *           <complexType>
    + *             <complexContent>
    + *               <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    + *                 <attribute name="resvTms" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *               </extension>
    + *             </complexContent>
    + *           </complexType>
    + *         </element>
    + *         <element name="ConfSG" minOccurs="0">
    + *           <complexType>
    + *             <complexContent>
    + *               <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    + *                 <attribute name="resvTms" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *               </extension>
    + *             </complexContent>
    + *           </complexType>
    + *         </element>
    + *       </all>
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSettingGroups", propOrder = { + +}) +public class TSettingGroups { + + @XmlElement(name = "SGEdit") + protected TSettingGroups.SGEdit sgEdit; + @XmlElement(name = "ConfSG") + protected TSettingGroups.ConfSG confSG; + + /** + * 获取sgEdit属性的值。 + * + * @return + * possible object is + * {@link TSettingGroups.SGEdit } + * + */ + public TSettingGroups.SGEdit getSGEdit() { + return sgEdit; + } + + /** + * 设置sgEdit属性的值。 + * + * @param value + * allowed object is + * {@link TSettingGroups.SGEdit } + * + */ + public void setSGEdit(TSettingGroups.SGEdit value) { + this.sgEdit = value; + } + + /** + * 获取confSG属性的值。 + * + * @return + * possible object is + * {@link TSettingGroups.ConfSG } + * + */ + public TSettingGroups.ConfSG getConfSG() { + return confSG; + } + + /** + * 设置confSG属性的值。 + * + * @param value + * allowed object is + * {@link TSettingGroups.ConfSG } + * + */ + public void setConfSG(TSettingGroups.ConfSG value) { + this.confSG = value; + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <complexContent>
    +     *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    +     *       <attribute name="resvTms" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    +     *     </extension>
    +     *   </complexContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class ConfSG + extends TServiceYesNo + { + + @XmlAttribute(name = "resvTms") + protected Boolean resvTms; + + /** + * 获取resvTms属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isResvTms() { + if (resvTms == null) { + return false; + } else { + return resvTms; + } + } + + /** + * 设置resvTms属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setResvTms(Boolean value) { + this.resvTms = value; + } + + } + + + /** + *

    anonymous complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    +     * <complexType>
    +     *   <complexContent>
    +     *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    +     *       <attribute name="resvTms" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    +     *     </extension>
    +     *   </complexContent>
    +     * </complexType>
    +     * 
    + * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class SGEdit + extends TServiceYesNo + { + + @XmlAttribute(name = "resvTms") + protected Boolean resvTms; + + /** + * 获取resvTms属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isResvTms() { + if (resvTms == null) { + return false; + } else { + return resvTms; + } + } + + /** + * 设置resvTms属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setResvTms(Boolean value) { + this.resvTms = value; + } + + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSmpMod.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSmpMod.java new file mode 100644 index 0000000..e2e245d --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSmpMod.java @@ -0,0 +1,61 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSmpMod的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tSmpMod">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}normalizedString">
    + *     <enumeration value="SmpPerPeriod"/>
    + *     <enumeration value="SmpPerSec"/>
    + *     <enumeration value="SecPerSmp"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tSmpMod") +@XmlEnum +public enum TSmpMod { + + @XmlEnumValue("SmpPerPeriod") + SMP_PER_PERIOD("SmpPerPeriod"), + @XmlEnumValue("SmpPerSec") + SMP_PER_SEC("SmpPerSec"), + @XmlEnumValue("SecPerSmp") + SEC_PER_SMP("SecPerSmp"); + private final String value; + + TSmpMod(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TSmpMod fromValue(String v) { + for (TSmpMod c: TSmpMod.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubEquipment.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubEquipment.java new file mode 100644 index 0000000..021ab94 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubEquipment.java @@ -0,0 +1,142 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSubEquipment complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSubEquipment">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agVirtual"/>
    + *       <attribute name="phase" type="{http://www.iec.ch/61850/2003/SCL}tPhaseEnum" default="none" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSubEquipment", propOrder = { + "eqFunction" +}) +public class TSubEquipment + extends TPowerSystemResource +{ + + @XmlElement(name = "EqFunction") + protected List eqFunction; + @XmlAttribute(name = "phase") + protected TPhaseEnum phase; + @XmlAttribute(name = "virtual") + protected Boolean virtual; + + /** + * Gets the value of the eqFunction property. + * + *

    + * 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 set method for the eqFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqFunction } + * + * + */ + public List getEqFunction() { + if (eqFunction == null) { + eqFunction = new ArrayList(); + } + return this.eqFunction; + } + + /** + * 获取phase属性的值。 + * + * @return + * possible object is + * {@link TPhaseEnum } + * + */ + public TPhaseEnum getPhase() { + if (phase == null) { + return TPhaseEnum.NONE; + } else { + return phase; + } + } + + /** + * 设置phase属性的值。 + * + * @param value + * allowed object is + * {@link TPhaseEnum } + * + */ + public void setPhase(TPhaseEnum value) { + this.phase = value; + } + + /** + * 获取virtual属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isVirtual() { + if (virtual == null) { + return false; + } else { + return virtual; + } + } + + /** + * 设置virtual属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setVirtual(Boolean value) { + this.virtual = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubFunction.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubFunction.java new file mode 100644 index 0000000..0cf2149 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubFunction.java @@ -0,0 +1,178 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSubFunction complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSubFunction">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="GeneralEquipment" type="{http://www.iec.ch/61850/2003/SCL}tGeneralEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="ConductingEquipment" type="{http://www.iec.ch/61850/2003/SCL}tConductingEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="SubFunction" type="{http://www.iec.ch/61850/2003/SCL}tSubFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.w3.org/2001/XMLSchema}normalizedString" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSubFunction", propOrder = { + "generalEquipment", + "conductingEquipment", + "subFunction" +}) +public class TSubFunction + extends TPowerSystemResource +{ + + @XmlElement(name = "GeneralEquipment") + protected List generalEquipment; + @XmlElement(name = "ConductingEquipment") + protected List conductingEquipment; + @XmlElement(name = "SubFunction") + protected List subFunction; + @XmlAttribute(name = "type") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String type; + + /** + * Gets the value of the generalEquipment property. + * + *

    + * 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 set method for the generalEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getGeneralEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TGeneralEquipment } + * + * + */ + public List getGeneralEquipment() { + if (generalEquipment == null) { + generalEquipment = new ArrayList(); + } + return this.generalEquipment; + } + + /** + * Gets the value of the conductingEquipment property. + * + *

    + * 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 set method for the conductingEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConductingEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConductingEquipment } + * + * + */ + public List getConductingEquipment() { + if (conductingEquipment == null) { + conductingEquipment = new ArrayList(); + } + return this.conductingEquipment; + } + + /** + * Gets the value of the subFunction property. + * + *

    + * 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 set method for the subFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubFunction } + * + * + */ + public List getSubFunction() { + if (subFunction == null) { + subFunction = new ArrayList(); + } + return this.subFunction; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubNetwork.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubNetwork.java new file mode 100644 index 0000000..02ea9e9 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubNetwork.java @@ -0,0 +1,135 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSubNetwork complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSubNetwork">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tNaming">
    + *       <sequence>
    + *         <element name="BitRate" type="{http://www.iec.ch/61850/2003/SCL}tBitRateInMbPerSec" minOccurs="0"/>
    + *         <element name="ConnectedAP" type="{http://www.iec.ch/61850/2003/SCL}tConnectedAP" maxOccurs="unbounded"/>
    + *       </sequence>
    + *       <attribute name="type" type="{http://www.iec.ch/61850/2003/SCL}tSubnetType" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSubNetwork", propOrder = { + "bitRate", + "connectedAP" +}) +public class TSubNetwork + extends TNaming +{ + + @XmlElement(name = "BitRate") + protected TBitRateInMbPerSec bitRate; + @XmlElement(name = "ConnectedAP", required = true) + protected List connectedAP; + @XmlAttribute(name = "type") + protected String type; + + /** + * 获取bitRate属性的值。 + * + * @return + * possible object is + * {@link TBitRateInMbPerSec } + * + */ + public TBitRateInMbPerSec getBitRate() { + return bitRate; + } + + /** + * 设置bitRate属性的值。 + * + * @param value + * allowed object is + * {@link TBitRateInMbPerSec } + * + */ + public void setBitRate(TBitRateInMbPerSec value) { + this.bitRate = value; + } + + /** + * Gets the value of the connectedAP property. + * + *

    + * 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 set method for the connectedAP property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getConnectedAP().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TConnectedAP } + * + * + */ + public List getConnectedAP() { + if (connectedAP == null) { + connectedAP = new ArrayList(); + } + return this.connectedAP; + } + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubstation.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubstation.java new file mode 100644 index 0000000..089eedc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSubstation.java @@ -0,0 +1,112 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSubstation complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSubstation">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tEquipmentContainer">
    + *       <sequence>
    + *         <element name="VoltageLevel" type="{http://www.iec.ch/61850/2003/SCL}tVoltageLevel" maxOccurs="unbounded"/>
    + *         <element name="Function" type="{http://www.iec.ch/61850/2003/SCL}tFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSubstation", propOrder = { + "voltageLevel", + "function" +}) +public class TSubstation + extends TEquipmentContainer +{ + + @XmlElement(name = "VoltageLevel", required = true) + protected List voltageLevel; + @XmlElement(name = "Function") + protected List function; + + /** + * Gets the value of the voltageLevel property. + * + *

    + * 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 set method for the voltageLevel property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getVoltageLevel().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TVoltageLevel } + * + * + */ + public List getVoltageLevel() { + if (voltageLevel == null) { + voltageLevel = new ArrayList(); + } + return this.voltageLevel; + } + + /** + * Gets the value of the function property. + * + *

    + * 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 set method for the function property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TFunction } + * + * + */ + public List getFunction() { + if (function == null) { + function = new ArrayList(); + } + return this.function; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSupSubscription.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSupSubscription.java new file mode 100644 index 0000000..05b708e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSupSubscription.java @@ -0,0 +1,79 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tSupSubscription complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tSupSubscription">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="maxGo" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *       <attribute name="maxSv" use="required" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tSupSubscription") +public class TSupSubscription { + + @XmlAttribute(name = "maxGo", required = true) + @XmlSchemaType(name = "unsignedInt") + protected long maxGo; + @XmlAttribute(name = "maxSv", required = true) + @XmlSchemaType(name = "unsignedInt") + protected long maxSv; + + /** + * 获取maxGo属性的值。 + * + */ + public long getMaxGo() { + return maxGo; + } + + /** + * 设置maxGo属性的值。 + * + */ + public void setMaxGo(long value) { + this.maxGo = value; + } + + /** + * 获取maxSv属性的值。 + * + */ + public long getMaxSv() { + return maxSv; + } + + /** + * 设置maxSv属性的值。 + * + */ + public void setMaxSv(long value) { + this.maxSv = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSystemLNGroupEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSystemLNGroupEnum.java new file mode 100644 index 0000000..0a05bf7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TSystemLNGroupEnum.java @@ -0,0 +1,72 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tSystemLNGroupEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tSystemLNGroupEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <length value="4"/>
    + *     <pattern value="L[A-Z]*"/>
    + *     <pattern value="LLN0"/>
    + *     <enumeration value="LLN0"/>
    + *     <enumeration value="LPHD"/>
    + *     <enumeration value="LCCH"/>
    + *     <enumeration value="LGOS"/>
    + *     <enumeration value="LSVS"/>
    + *     <enumeration value="LTIM"/>
    + *     <enumeration value="LTMS"/>
    + *     <enumeration value="LTRK"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tSystemLNGroupEnum") +@XmlEnum +public enum TSystemLNGroupEnum { + + @XmlEnumValue("LLN0") + LLN_0("LLN0"), + LPHD("LPHD"), + LCCH("LCCH"), + LGOS("LGOS"), + LSVS("LSVS"), + LTIM("LTIM"), + LTMS("LTMS"), + LTRK("LTRK"); + private final String value; + + TSystemLNGroupEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TSystemLNGroupEnum fromValue(String v) { + for (TSystemLNGroupEnum c: TSystemLNGroupEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTapChanger.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTapChanger.java new file mode 100644 index 0000000..da1443a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTapChanger.java @@ -0,0 +1,180 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.CollapsedStringAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + + +/** + *

    tTapChanger complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tTapChanger">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tPowerSystemResource">
    + *       <sequence>
    + *         <element name="SubEquipment" type="{http://www.iec.ch/61850/2003/SCL}tSubEquipment" maxOccurs="unbounded" minOccurs="0"/>
    + *         <element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agVirtual"/>
    + *       <attribute name="type" use="required" type="{http://www.w3.org/2001/XMLSchema}Name" fixed="LTC" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTapChanger", propOrder = { + "subEquipment", + "eqFunction" +}) +public class TTapChanger + extends TPowerSystemResource +{ + + @XmlElement(name = "SubEquipment") + protected List subEquipment; + @XmlElement(name = "EqFunction") + protected List eqFunction; + @XmlAttribute(name = "type", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlSchemaType(name = "Name") + protected String type; + @XmlAttribute(name = "virtual") + protected Boolean virtual; + + /** + * Gets the value of the subEquipment property. + * + *

    + * 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 set method for the subEquipment property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getSubEquipment().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TSubEquipment } + * + * + */ + public List getSubEquipment() { + if (subEquipment == null) { + subEquipment = new ArrayList(); + } + return this.subEquipment; + } + + /** + * Gets the value of the eqFunction property. + * + *

    + * 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 set method for the eqFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqFunction } + * + * + */ + public List getEqFunction() { + if (eqFunction == null) { + eqFunction = new ArrayList(); + } + return this.eqFunction; + } + + /** + * 获取type属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getType() { + if (type == null) { + return "LTC"; + } else { + return type; + } + } + + /** + * 设置type属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setType(String value) { + this.type = value; + } + + /** + * 获取virtual属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isVirtual() { + if (virtual == null) { + return false; + } else { + return virtual; + } + } + + /** + * 设置virtual属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setVirtual(Boolean value) { + this.virtual = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTerminal.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTerminal.java new file mode 100644 index 0000000..d48e688 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTerminal.java @@ -0,0 +1,298 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tTerminal complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tTerminal">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tUnNaming">
    + *       <attribute name="name" type="{http://www.iec.ch/61850/2003/SCL}tAnyName" default="" />
    + *       <attribute name="connectivityNode" use="required" type="{http://www.iec.ch/61850/2003/SCL}tConnectivityNodeReference" />
    + *       <attribute name="processName" type="{http://www.iec.ch/61850/2003/SCL}tProcessName" />
    + *       <attribute name="lineName" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="substationName" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="voltageLevelName" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="bayName" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="cNodeName" use="required" type="{http://www.iec.ch/61850/2003/SCL}tName" />
    + *       <attribute name="cNodeUuid" type="{http://www.iec.ch/61850/2003/SCL}tUUIDAttribute" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTerminal") +public class TTerminal + extends TUnNaming +{ + + @XmlAttribute(name = "name") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String name; + @XmlAttribute(name = "connectivityNode", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String connectivityNode; + @XmlAttribute(name = "processName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String processName; + @XmlAttribute(name = "lineName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String lineName; + @XmlAttribute(name = "substationName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String substationName; + @XmlAttribute(name = "voltageLevelName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String voltageLevelName; + @XmlAttribute(name = "bayName") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String bayName; + @XmlAttribute(name = "cNodeName", required = true) + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + protected String cNodeName; + @XmlAttribute(name = "cNodeUuid") + protected String cNodeUuid; + + /** + * 获取name属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getName() { + if (name == null) { + return ""; + } else { + return name; + } + } + + /** + * 设置name属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setName(String value) { + this.name = value; + } + + /** + * 获取connectivityNode属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getConnectivityNode() { + return connectivityNode; + } + + /** + * 设置connectivityNode属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setConnectivityNode(String value) { + this.connectivityNode = value; + } + + /** + * 获取processName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getProcessName() { + return processName; + } + + /** + * 设置processName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setProcessName(String value) { + this.processName = value; + } + + /** + * 获取lineName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getLineName() { + return lineName; + } + + /** + * 设置lineName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLineName(String value) { + this.lineName = value; + } + + /** + * 获取substationName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSubstationName() { + return substationName; + } + + /** + * 设置substationName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSubstationName(String value) { + this.substationName = value; + } + + /** + * 获取voltageLevelName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getVoltageLevelName() { + return voltageLevelName; + } + + /** + * 设置voltageLevelName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVoltageLevelName(String value) { + this.voltageLevelName = value; + } + + /** + * 获取bayName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getBayName() { + return bayName; + } + + /** + * 设置bayName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setBayName(String value) { + this.bayName = value; + } + + /** + * 获取cNodeName属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCNodeName() { + return cNodeName; + } + + /** + * 设置cNodeName属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCNodeName(String value) { + this.cNodeName = value; + } + + /** + * 获取cNodeUuid属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCNodeUuid() { + return cNodeUuid; + } + + /** + * 设置cNodeUuid属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCNodeUuid(String value) { + this.cNodeUuid = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TText.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TText.java new file mode 100644 index 0000000..8a43b29 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TText.java @@ -0,0 +1,70 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

    tText complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tText">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAnyContentFromOtherNamespace">
    + *       <attribute name="source" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tText") +public class TText + extends TAnyContentFromOtherNamespace +{ + + @XmlAttribute(name = "source") + @XmlSchemaType(name = "anyURI") + protected String source; + + /** + * 获取source属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSource() { + return source; + } + + /** + * 设置source属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSource(String value) { + this.source = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTimeSyncProt.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTimeSyncProt.java new file mode 100644 index 0000000..2b828dc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTimeSyncProt.java @@ -0,0 +1,164 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tTimeSyncProt complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tTimeSyncProt">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tServiceYesNo">
    + *       <attribute name="sntp" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *       <attribute name="iec61850_9_3" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="c37_238" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="other" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTimeSyncProt") +public class TTimeSyncProt + extends TServiceYesNo +{ + + @XmlAttribute(name = "sntp") + protected Boolean sntp; + @XmlAttribute(name = "iec61850_9_3") + protected Boolean iec6185093; + @XmlAttribute(name = "c37_238") + protected Boolean c37238; + @XmlAttribute(name = "other") + protected Boolean other; + + /** + * 获取sntp属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSntp() { + if (sntp == null) { + return true; + } else { + return sntp; + } + } + + /** + * 设置sntp属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSntp(Boolean value) { + this.sntp = value; + } + + /** + * 获取iec6185093属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isIec6185093() { + if (iec6185093 == null) { + return false; + } else { + return iec6185093; + } + } + + /** + * 设置iec6185093属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setIec6185093(Boolean value) { + this.iec6185093 = value; + } + + /** + * 获取c37238属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isC37238() { + if (c37238 == null) { + return false; + } else { + return c37238; + } + } + + /** + * 设置c37238属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setC37238(Boolean value) { + this.c37238 = value; + } + + /** + * 获取other属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isOther() { + if (other == null) { + return false; + } else { + return other; + } + } + + /** + * 设置other属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setOther(Boolean value) { + this.other = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWinding.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWinding.java new file mode 100644 index 0000000..894e898 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWinding.java @@ -0,0 +1,167 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tTransformerWinding complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tTransformerWinding">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tAbstractConductingEquipment">
    + *       <sequence>
    + *         <element name="TapChanger" type="{http://www.iec.ch/61850/2003/SCL}tTapChanger" minOccurs="0"/>
    + *         <element name="NeutralPoint" type="{http://www.iec.ch/61850/2003/SCL}tTerminal" minOccurs="0"/>
    + *         <element name="EqFunction" type="{http://www.iec.ch/61850/2003/SCL}tEqFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="type" use="required" type="{http://www.iec.ch/61850/2003/SCL}tTransformerWindingEnum" fixed="PTW" />
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTransformerWinding", propOrder = { + "tapChanger", + "neutralPoint", + "eqFunction" +}) +public class TTransformerWinding + extends TAbstractConductingEquipment +{ + + @XmlElement(name = "TapChanger") + protected TTapChanger tapChanger; + @XmlElement(name = "NeutralPoint") + protected TTerminal neutralPoint; + @XmlElement(name = "EqFunction") + protected List eqFunction; + @XmlAttribute(name = "type", required = true) + protected TTransformerWindingEnum type; + + /** + * 获取tapChanger属性的值。 + * + * @return + * possible object is + * {@link TTapChanger } + * + */ + public TTapChanger getTapChanger() { + return tapChanger; + } + + /** + * 设置tapChanger属性的值。 + * + * @param value + * allowed object is + * {@link TTapChanger } + * + */ + public void setTapChanger(TTapChanger value) { + this.tapChanger = value; + } + + /** + * 获取neutralPoint属性的值。 + * + * @return + * possible object is + * {@link TTerminal } + * + */ + public TTerminal getNeutralPoint() { + return neutralPoint; + } + + /** + * 设置neutralPoint属性的值。 + * + * @param value + * allowed object is + * {@link TTerminal } + * + */ + public void setNeutralPoint(TTerminal value) { + this.neutralPoint = value; + } + + /** + * Gets the value of the eqFunction property. + * + *

    + * 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 set method for the eqFunction property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getEqFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TEqFunction } + * + * + */ + public List getEqFunction() { + if (eqFunction == null) { + eqFunction = new ArrayList(); + } + return this.eqFunction; + } + + /** + * 获取type属性的值。 + * + * @return + * possible object is + * {@link TTransformerWindingEnum } + * + */ + public TTransformerWindingEnum getType() { + if (type == null) { + return TTransformerWindingEnum.PTW; + } else { + return type; + } + } + + /** + * 设置type属性的值。 + * + * @param value + * allowed object is + * {@link TTransformerWindingEnum } + * + */ + public void setType(TTransformerWindingEnum value) { + this.type = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWindingEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWindingEnum.java new file mode 100644 index 0000000..f6df6ad --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTransformerWindingEnum.java @@ -0,0 +1,43 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tTransformerWindingEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tTransformerWindingEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="PTW"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tTransformerWindingEnum") +@XmlEnum +public enum TTransformerWindingEnum { + + PTW; + + public String value() { + return name(); + } + + public static TTransformerWindingEnum fromValue(String v) { + return valueOf(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTrgOps.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTrgOps.java new file mode 100644 index 0000000..fe4ed0e --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TTrgOps.java @@ -0,0 +1,193 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tTrgOps complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tTrgOps">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="dchg" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="qchg" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="dupd" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="period" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *       <attribute name="gi" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tTrgOps") +public class TTrgOps { + + @XmlAttribute(name = "dchg") + protected Boolean dchg; + @XmlAttribute(name = "qchg") + protected Boolean qchg; + @XmlAttribute(name = "dupd") + protected Boolean dupd; + @XmlAttribute(name = "period") + protected Boolean period; + @XmlAttribute(name = "gi") + protected Boolean gi; + + /** + * 获取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; + } + + /** + * 获取period属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isPeriod() { + if (period == null) { + return false; + } else { + return period; + } + } + + /** + * 设置period属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setPeriod(Boolean value) { + this.period = value; + } + + /** + * 获取gi属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isGi() { + if (gi == null) { + return true; + } else { + return gi; + } + } + + /** + * 设置gi属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setGi(Boolean value) { + this.gi = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TUnNaming.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TUnNaming.java new file mode 100644 index 0000000..0874ca8 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TUnNaming.java @@ -0,0 +1,107 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.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; + + +/** + *

    tUnNaming complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tUnNaming">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tBaseElement">
    + *       <attGroup ref="{http://www.iec.ch/61850/2003/SCL}agDesc"/>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tUnNaming") +@XmlSeeAlso({ + TDataSet.class, + TDOI.class, + TInputs.class, + TOutputs.class, + TLog.class, + TLabels.class, + TSettingControl.class, + TIED.class, + TCommunication.class, + TLNode.class, + TTerminal.class, + TSclFileUUIDReference.class, + TAccessPoint.class, + TServerAt.class, + TServer.class, + TLDevice.class, + TRptEnabled.class, + TControl.class, + TSDI.class, + TDAI.class, + TConnectedAP.class, + TControlBlock.class, + TPhysConn.class, + TDO.class, + TSDO.class, + TAbstractDataAttribute.class, + TAnyLN.class +}) +public abstract class TUnNaming + extends TBaseElement +{ + + @XmlAttribute(name = "desc") + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String desc; + + /** + * 获取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; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVal.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVal.java new file mode 100644 index 0000000..9404937 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVal.java @@ -0,0 +1,100 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.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; + + +/** + *

    tVal complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tVal">
    + *   <simpleContent>
    + *     <extension base="<http://www.w3.org/2001/XMLSchema>normalizedString">
    + *       <attribute name="sGroup" type="{http://www.w3.org/2001/XMLSchema}unsignedInt" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tVal", propOrder = { + "value" +}) +public class TVal { + + @XmlValue + @XmlJavaTypeAdapter(NormalizedStringAdapter.class) + @XmlSchemaType(name = "normalizedString") + protected String value; + @XmlAttribute(name = "sGroup") + @XmlSchemaType(name = "unsignedInt") + protected Long sGroup; + + /** + * 获取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; + } + + /** + * 获取sGroup属性的值。 + * + * @return + * possible object is + * {@link Long } + * + */ + public Long getSGroup() { + return sGroup; + } + + /** + * 设置sGroup属性的值。 + * + * @param value + * allowed object is + * {@link Long } + * + */ + public void setSGroup(Long value) { + this.sGroup = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValKindEnum.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValKindEnum.java new file mode 100644 index 0000000..8ab2e84 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValKindEnum.java @@ -0,0 +1,63 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tValKindEnum的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + *

    + *

    + * <simpleType name="tValKindEnum">
    + *   <restriction base="{http://www.w3.org/2001/XMLSchema}Name">
    + *     <enumeration value="Spec"/>
    + *     <enumeration value="Conf"/>
    + *     <enumeration value="RO"/>
    + *     <enumeration value="Set"/>
    + *   </restriction>
    + * </simpleType>
    + * 
    + * + */ +@XmlType(name = "tValKindEnum") +@XmlEnum +public enum TValKindEnum { + + @XmlEnumValue("Spec") + SPEC("Spec"), + @XmlEnumValue("Conf") + CONF("Conf"), + RO("RO"), + @XmlEnumValue("Set") + SET("Set"); + private final String value; + + TValKindEnum(String v) { + value = v; + } + + public String value() { + return value; + } + + public static TValKindEnum fromValue(String v) { + for (TValKindEnum c: TValKindEnum.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueHandling.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueHandling.java new file mode 100644 index 0000000..4c54cff --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueHandling.java @@ -0,0 +1,69 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tValueHandling complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tValueHandling">
    + *   <complexContent>
    + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
    + *       <attribute name="setToRO" type="{http://www.w3.org/2001/XMLSchema}boolean" default="false" />
    + *     </restriction>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tValueHandling") +public class TValueHandling { + + @XmlAttribute(name = "setToRO") + protected Boolean setToRO; + + /** + * 获取setToRO属性的值。 + * + * @return + * possible object is + * {@link Boolean } + * + */ + public boolean isSetToRO() { + if (setToRO == null) { + return false; + } else { + return setToRO; + } + } + + /** + * 设置setToRO属性的值。 + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSetToRO(Boolean value) { + this.setToRO = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueWithUnit.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueWithUnit.java new file mode 100644 index 0000000..920769c --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TValueWithUnit.java @@ -0,0 +1,138 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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.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; + + +/** + *

    tValueWithUnit complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tValueWithUnit">
    + *   <simpleContent>
    + *     <extension base="<http://www.w3.org/2001/XMLSchema>decimal">
    + *       <attribute name="unit" use="required" type="{http://www.w3.org/2001/XMLSchema}token" />
    + *       <attribute name="multiplier" type="{http://www.iec.ch/61850/2003/SCL}tUnitMultiplierEnum" default="" />
    + *     </extension>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tValueWithUnit", propOrder = { + "value" +}) +@XmlSeeAlso({ + TVoltage.class, + TDurationInSec.class +}) +public class TValueWithUnit { + + @XmlValue + protected BigDecimal value; + @XmlAttribute(name = "unit", required = true) + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlSchemaType(name = "token") + 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() { + 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 ""; + } else { + return multiplier; + } + } + + /** + * 设置multiplier属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMultiplier(String value) { + this.multiplier = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltage.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltage.java new file mode 100644 index 0000000..c41c9c7 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltage.java @@ -0,0 +1,41 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 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; + + +/** + *

    tVoltage complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tVoltage">
    + *   <simpleContent>
    + *     <restriction base="<http://www.iec.ch/61850/2003/SCL>tValueWithUnit">
    + *       <attribute name="unit" use="required" type="{http://www.w3.org/2001/XMLSchema}token" fixed="V" />
    + *       <attribute name="multiplier" type="{http://www.iec.ch/61850/2003/SCL}tUnitMultiplierEnum" default="" />
    + *     </restriction>
    + *   </simpleContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tVoltage") +public class TVoltage + extends TValueWithUnit +{ + + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltageLevel.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltageLevel.java new file mode 100644 index 0000000..dcd4be8 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/TVoltageLevel.java @@ -0,0 +1,208 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2026.03.02 时间 03:10:34 PM CST +// + + +package com.njcn.gather.icd.mapping.infrastructure.parser.generated; + +import java.math.BigDecimal; +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; + + +/** + *

    tVoltageLevel complex type的 Java 类。 + * + *

    以下模式片段指定包含在此类中的预期内容。 + * + *

    + * <complexType name="tVoltageLevel">
    + *   <complexContent>
    + *     <extension base="{http://www.iec.ch/61850/2003/SCL}tEquipmentContainer">
    + *       <sequence>
    + *         <element name="Voltage" type="{http://www.iec.ch/61850/2003/SCL}tVoltage" minOccurs="0"/>
    + *         <element name="Bay" type="{http://www.iec.ch/61850/2003/SCL}tBay" maxOccurs="unbounded"/>
    + *         <element name="Function" type="{http://www.iec.ch/61850/2003/SCL}tFunction" maxOccurs="unbounded" minOccurs="0"/>
    + *       </sequence>
    + *       <attribute name="nomFreq">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}decimal">
    + *             <minInclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <attribute name="numPhases">
    + *         <simpleType>
    + *           <restriction base="{http://www.w3.org/2001/XMLSchema}unsignedByte">
    + *             <minExclusive value="0"/>
    + *           </restriction>
    + *         </simpleType>
    + *       </attribute>
    + *       <anyAttribute processContents='lax' namespace='##other'/>
    + *     </extension>
    + *   </complexContent>
    + * </complexType>
    + * 
    + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "tVoltageLevel", propOrder = { + "voltage", + "bay", + "function" +}) +public class TVoltageLevel + extends TEquipmentContainer +{ + + @XmlElement(name = "Voltage") + protected TVoltage voltage; + @XmlElement(name = "Bay", required = true) + protected List bay; + @XmlElement(name = "Function") + protected List function; + @XmlAttribute(name = "nomFreq") + protected BigDecimal nomFreq; + @XmlAttribute(name = "numPhases") + protected Short numPhases; + + /** + * 获取voltage属性的值。 + * + * @return + * possible object is + * {@link TVoltage } + * + */ + public TVoltage getVoltage() { + return voltage; + } + + /** + * 设置voltage属性的值。 + * + * @param value + * allowed object is + * {@link TVoltage } + * + */ + public void setVoltage(TVoltage value) { + this.voltage = value; + } + + /** + * Gets the value of the bay property. + * + *

    + * 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 set method for the bay property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getBay().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TBay } + * + * + */ + public List getBay() { + if (bay == null) { + bay = new ArrayList(); + } + return this.bay; + } + + /** + * Gets the value of the function property. + * + *

    + * 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 set method for the function property. + * + *

    + * For example, to add a new item, do as follows: + *

    +     *    getFunction().add(newItem);
    +     * 
    + * + * + *

    + * Objects of the following type(s) are allowed in the list + * {@link TFunction } + * + * + */ + public List getFunction() { + if (function == null) { + function = new ArrayList(); + } + return this.function; + } + + /** + * 获取nomFreq属性的值。 + * + * @return + * possible object is + * {@link BigDecimal } + * + */ + public BigDecimal getNomFreq() { + return nomFreq; + } + + /** + * 设置nomFreq属性的值。 + * + * @param value + * allowed object is + * {@link BigDecimal } + * + */ + public void setNomFreq(BigDecimal value) { + this.nomFreq = value; + } + + /** + * 获取numPhases属性的值。 + * + * @return + * possible object is + * {@link Short } + * + */ + public Short getNumPhases() { + return numPhases; + } + + /** + * 设置numPhases属性的值。 + * + * @param value + * allowed object is + * {@link Short } + * + */ + public void setNumPhases(Short value) { + this.numPhases = value; + } + +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/package-info.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/package-info.java new file mode 100644 index 0000000..15db0be --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/parser/generated/package-info.java @@ -0,0 +1,9 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.3.0 生成的 +// 请访问 https://javaee.github.io/jaxb-v2/ +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2026.03.02 时间 03:10:34 PM CST +// + +@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.iec.ch/61850/2003/SCL", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +package com.njcn.gather.icd.mapping.infrastructure.parser.generated; diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/serializer/MappingDocumentSerializer.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/serializer/MappingDocumentSerializer.java new file mode 100644 index 0000000..7ce88bc --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/serializer/MappingDocumentSerializer.java @@ -0,0 +1,42 @@ +package com.njcn.gather.icd.mapping.infrastructure.serializer; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.njcn.gather.icd.mapping.domain.model.mapping.MappingDocument; +import org.springframework.stereotype.Component; + +/** + * 映射文档序列化器。 + */ +@Component +public class MappingDocumentSerializer { + + private final ObjectMapper compactMapper; + private final ObjectMapper prettyMapper; + + public MappingDocumentSerializer() { + compactMapper = new ObjectMapper(); + compactMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + prettyMapper = new ObjectMapper(); + prettyMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + prettyMapper.enable(SerializationFeature.INDENT_OUTPUT); + } + + public String toCompactJson(MappingDocument document) { + try { + return compactMapper.writeValueAsString(document); + } catch (Exception ex) { + throw new IllegalArgumentException("映射文档序列化失败:" + ex.getMessage(), ex); + } + } + + public String toPrettyJson(MappingDocument document) { + try { + return prettyMapper.writeValueAsString(document); + } catch (Exception ex) { + throw new IllegalArgumentException("映射文档序列化失败:" + ex.getMessage(), ex); + } + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/storage/FileStorageService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/storage/FileStorageService.java new file mode 100644 index 0000000..d76b74a --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/infrastructure/storage/FileStorageService.java @@ -0,0 +1,32 @@ +package com.njcn.gather.icd.mapping.infrastructure.storage; + +import org.springframework.stereotype.Component; + +import java.io.File; +import java.io.FileOutputStream; +import java.nio.charset.StandardCharsets; + +/** + * 文件存储服务。负责把最终映射 JSON 保存到指定目录。 + */ +@Component +public class FileStorageService { + public String save(String fileName, String content, String outputDir) { + try { + File dir = outputDir == null || outputDir.trim().isEmpty() ? new File(".") : new File(outputDir); + if (!dir.exists() && !dir.mkdirs()) { + throw new IllegalStateException("输出目录创建失败:" + dir.getAbsolutePath()); + } + if (!dir.isDirectory()) { + throw new IllegalStateException("输出路径不是目录:" + dir.getAbsolutePath()); + } + File target = new File(dir, fileName); + try (FileOutputStream fos = new FileOutputStream(target)) { + fos.write(content.getBytes(StandardCharsets.UTF_8)); + } + return target.getAbsolutePath(); + } catch (Exception ex) { + throw new IllegalArgumentException("映射文件保存失败:" + ex.getMessage(), ex); + } + } +} diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/DateUtils.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/DateUtils.java new file mode 100644 index 0000000..4603533 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/DateUtils.java @@ -0,0 +1,17 @@ +package com.njcn.gather.icd.mapping.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * 日期工具。 + */ +public final class DateUtils { + + private DateUtils() { + } + + public static String nowText() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/JsonUtils.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/JsonUtils.java new file mode 100644 index 0000000..becb695 --- /dev/null +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/utils/JsonUtils.java @@ -0,0 +1,22 @@ +package com.njcn.gather.icd.mapping.utils; + +/** + * JSON 文本处理工具。 + * + * 作用: + * 1. 兼容老配置文件中常见的尾逗号问题。 + * 2. 降低 DefaultCfg.txt 因历史书写习惯造成的解析失败概率。 + */ +public final class JsonUtils { + + private JsonUtils() { + } + + public static String sanitizeJson(String text) { + if (text == null) { + return null; + } + // 去掉对象或数组结束前的尾逗号。 + return text.replaceAll(",\\s*([}\\]])", "$1"); + } +} \ No newline at end of file diff --git a/tools/mms-mapping/src/main/resources/template/DefaultCfg.txt b/tools/mms-mapping/src/main/resources/template/DefaultCfg.txt new file mode 100644 index 0000000..eeb7d64 --- /dev/null +++ b/tools/mms-mapping/src/main/resources/template/DefaultCfg.txt @@ -0,0 +1,756 @@ +{ + "ReportList": [ + { + "desc": "统计数据", + "inst": "01", + "TrgOps": "96", + "Select": "DataStatFileMap", + "DataSetList": [ + "dsStatisticData", + "dsStHarm", + "dsStIHarm", + "dsStMMXU", + "dsStMSQI", + ], + "LnInstList": [ + "最大值", + "最小值", + "平均值", + "95值", + "方均根值", + "间谐波最大值", + "间谐波最小值", + "间谐波平均值", + "间谐波95值", + "间谐波方均根值" + ] + }, + { + "desc": "波动闪变", + "inst": "01", + "TrgOps": "96", + "Select": "FlickerFileMap", + "DataSetList": [ + "dsFlickerData", + "dsPST" + ], + "LnInstList": [ + "波动闪变值" + ] + }, + { + "desc": "实时数据", + "inst": "01", + "TrgOps": "40", + "Select": "DataRealFileMap", + "DataSetList": [ + "dsRealTimeData", + "dsRtHarm", + "dsRtIHarm", + "dsRtMMXU", + "dsRtMSQI", + "dsRtFre" + ], + "LnInstList": [ + "实时数据", + "间谐波实时数据" + ] + }, + { + "desc": "暂态事件", + "inst": "01", + "TrgOps": "96", + "Select": "QVVR", + "DataSetList": [ + "dsEveQVVR" + ], + "LnInstList": [ + "电压变动A", + "电压变动B", + "电压变动C" + ] + }, + { + "desc": "录波状态", + "inst": "01", + "TrgOps": "96", + "Select": "RDRE", + "DataSetList": [ + "dsEveRDRE" + ], + "LnInstList": [ + "录波文件" + ] + } + ], + "LnClassList": [ + { + "desc": "基本数据", + "nameList": [ + "MMXU" + ] + }, + { + "desc": "序分量值", + "nameList": [ + "MSQI" + ] + }, + { + "desc": "谐波/间谐波数据", + "nameList": [ + "MHAI" + ] + }, + { + "desc": "波动闪变", + "nameList": [ + "MFLK" + ] + }, + { + "desc": "电压变动", + "nameList": [ + "QVVR" + ] + } + ], + "PhaseList": [ + { + "desc": "无相别", + "nameList": [ + "null" + ] + }, + { + "desc": "正序", + "nameList": [ + "c1" + ] + }, + { + "desc": "负序", + "nameList": [ + "c2" + ] + }, + { + "desc": "零序", + "nameList": [ + "c3" + ] + }, + { + "desc": "A相", + "nameList": [ + "phsA", + "phsAHar" + ] + }, + { + "desc": "B相", + "nameList": [ + "phsB", + "phsBHar" + ] + }, + { + "desc": "C相", + "nameList": [ + "phsC", + "phsCHar" + ] + }, + { + "desc": "AB线", + "nameList": [ + "phsAB", + "phsABHar" + ] + }, + { + "desc": "BC线", + "nameList": [ + "phsBC", + "phsBCHar" + ] + }, + { + "desc": "CA线", + "nameList": [ + "phsCA", + "phsCAHar" + ] + } + ], + "MultiplierList": [ + { + "multiplier": 1, + "nameList": [ + "null" + ] + }, + { + "multiplier": 1000, + "nameList": [ + "k" + ] + } + ], + "UnitList": [ + { + "desc": "other", + "nameList": [ + "null" + ] + }, + { + "desc": "v", + "nameList": [ + "V" + ] + }, + { + "desc": "a", + "nameList": [ + "A" + ] + }, + { + "desc": "w", + "nameList": [ + "W", + "VAr", + "VA" + ] + } + ], + "TypeList": [ + { + "desc": "值", + "nameList": [ + "mag" + ] + }, + { + "desc": "角度", + "nameList": [ + "ang" + ] + } + ], + "DataObjectsList": [ + { + "desc": "非间谐波数据", + "LnInstList": [ + "最大值", + "最小值", + "平均值", + "95值", + "实时数据" + ], + "ObjectList": [ + { + "desc": "频率", + "nameList": [ + "Hz" + ] + }, + { + "desc": "线电压总有效值", + "nameList": [ + "PPV" + ] + }, + { + "desc": "相电压总有效值", + "nameList": [ + "PhV" + ] + }, + { + "desc": "电流总有效值", + "nameList": [ + "A" + ] + }, + { + "desc": "有功功率", + "nameList": [ + "W" + ] + }, + { + "desc": "无功功率", + "nameList": [ + "VAr" + ] + }, + { + "desc": "视在功率", + "nameList": [ + "VA" + ] + }, + { + "desc": "功率因数", + "nameList": [ + "PF" + ] + }, + { + "desc": "位移功率因数", + "nameList": [ + "DF" + ] + }, + { + "desc": "三相总有功功率", + "nameList": [ + "TotW" + ] + }, + { + "desc": "三相总无功功率", + "nameList": [ + "TotVAr" + ] + }, + { + "desc": "三相总视在功率", + "nameList": [ + "TotVA" + ] + }, + { + "desc": "三相功率因数", + "nameList": [ + "TotPF" + ] + }, + { + "desc": "三相位移功率因数", + "nameList": [ + "TotDF" + ] + }, + { + "desc": "频率偏差", + "nameList": [ + "HzDev" + ] + }, + { + "desc": "相电压偏差", + "nameList": [ + "PhVDev" + ] + }, + { + "desc": "线电压偏差", + "nameList": [ + "PPVDev" + ] + }, + { + "desc": "正序负序和零序电压", + "nameList": [ + "SeqV" + ] + }, + { + "desc": "正序负序和零序电流", + "nameList": [ + "SeqA" + ] + }, + { + "desc": "电压负序不平衡度", + "nameList": [ + "ImbNgV" + ] + }, + { + "desc": "电流负序不平衡度", + "nameList": [ + "ImbNgA" + ] + }, + { + "desc": "电压零序不平衡度", + "nameList": [ + "ImbZroV" + ] + }, + { + "desc": "电流零序不平衡度", + "nameList": [ + "ImbZroA" + ] + }, + { + "desc": "相电压谐波总畸变率", + "nameList": [ + "ThdPhV" + ] + }, + { + "desc": "相电压总偶次谐波畸变率", + "nameList": [ + "ThdEvnPhV" + ] + }, + { + "desc": "相电压总奇次谐波畸变率", + "nameList": [ + "ThdOddPhV" + ] + }, + { + "desc": "线电压谐波总畸变率", + "nameList": [ + "ThdPPV" + ] + }, + { + "desc": "线电压总偶次谐波畸变率", + "nameList": [ + "ThdEvnPPV" + ] + }, + { + "desc": "线电压总奇次谐波畸变率", + "nameList": [ + "ThdOddPPV" + ] + }, + { + "desc": "相电压谐波含有率序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HRPhV", + "HPhVMag" + ] + }, + { + "desc": "线电压谐波含有率序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HRPPV" + ] + }, + { + "desc": "电流总谐波畸变率", + "nameList": [ + "ThdA" + ] + }, + { + "desc": "电流总偶次谐波畸变率", + "nameList": [ + "ThdEvnA" + ] + }, + { + "desc": "电流总奇次谐波畸变率", + "nameList": [ + "ThdOddA" + ] + }, + { + "desc": "谐波电流有效值序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HA", + "HAMag" + ] + }, + { + "desc": "谐波电压有效值序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HPhV" + ] + }, + { + "desc": "2~50次谐波有功功率序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HW" + ] + }, + { + "desc": "2~50次谐波无功功率序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HVAr" + ] + }, + { + "desc": "2~50次谐波视在功率序列", + "baseflag": 1, + "basecount": 49, + "nameList": [ + "HVA" + ] + }, + { + "desc": "三相总谐波视在功率", + "nameList": [ + "TotHVA" + ] + }, + { + "desc": "三相总谐波无功功率", + "nameList": [ + "TotHVAr" + ] + }, + { + "desc": "三相总谐波有功功率", + "nameList": [ + "TotHW" + ] + }, + { + "desc": "相电压基波有效值", + "baseflag": 2, + "queuecount": 49, + "nameList": [ + "HFundPhV", + "FundPhV" + ], + "queueList":[ + "HPhV" + ] + }, + { + "desc": "线电压基波有效值", + "baseflag": 2, + "queuecount": 49, + "nameList": [ + "HFundPPV" + ], + "queueList":[ + "HPPV" + ] + }, + { + "desc": "电流基波有效值", + "baseflag": 2, + "queuecount": 49, + "nameList": [ + + ], + "queueList":[ + "HA" + ] + }, + { + "desc": "基波有功功率", + "baseflag": 2, + "queuecount": 49, + "nameList": [ + + ], + "queueList":[ + "HW" + ] + }, + { + "desc": "基波无功功率", + "baseflag": 2, + "queuecount": 49, + "nameList": [ + + ], + "queueList":[ + "HVAr" + ] + }, + { + "desc": "基波视在功率", + "baseflag": 2, + "queuecount": 49, + "nameList": [ + + ], + "queueList":[ + "HVA" + ] + } + ] + }, + { + "desc": "间谐波数据", + "LnInstList": [ + "间谐波最大值", + "间谐波最小值", + "间谐波平均值", + "间谐波95值", + "间谐波实时数据" + ], + "ObjectList": [ + { + "desc": "相电压间谐波含有率序列", + "baseflag": 1, + "basecount": 50, + "nameList": [ + "HPhV" + ] + }, + { + "desc": "线电压间谐波含有率序列", + "baseflag": 1, + "basecount": 50, + "nameList": [ + "HRPPV" + ] + }, + { + "desc": "间谐波电流有效值序列", + "baseflag": 1, + "basecount": 50, + "nameList": [ + "HA" + ] + }, + { + "desc": "间谐波电压有效值序列", + "baseflag": 1, + "basecount": 50, + "nameList": [ + "HRPhV" + ] + } + ] + }, + { + "desc": "电压变动", + "LnInstList": [ + "电压变动A", + "电压变动B", + "电压变动C", + ], + "ObjectList": [ + { + "desc": "电压扰动事件启动", + "nameList": [ + "VarStr" + ] + }, + { + "desc": "电压暂降事件启动", + "nameList": [ + "DipStr" + ] + }, + { + "desc": "电压暂升事件启动", + "nameList": [ + "SwlStr" + ] + }, + { + "desc": "电压中断事件启动", + "nameList": [ + "IntrStr" + ] + }, + { + "desc": "电压扰动事件特征幅值", + "nameList": [ + "VVa" + ] + }, + { + "desc": "电压扰动事件持续时间", + "nameList": [ + "VVaTm" + ] + }, + { + "desc": "电压暂降启动定值", + "nameList": [ + "DipStrVal" + ] + }, + { + "desc": "电压暂升启动定值", + "nameList": [ + "SwlStrVal" + ] + }, + { + "desc": "电压中断启动定值", + "nameList": [ + "IntrStrVal" + ] + } + ] + }, + { + "desc": "其余数据", + "LnInstList": [ + "波动闪变值", + "录波文件" + ], + "ObjectList": [ + { + "desc": "线电压短时闪变值", + "nameList": [ + "PPPst" + ] + }, + { + "desc": "相电压短时闪变值", + "nameList": [ + "PhPst" + ] + }, + { + "desc": "线电压长时闪变值", + "nameList": [ + "PPPlt" + ] + }, + { + "desc": "相电压长时闪变值", + "nameList": [ + "PhPlt" + ] + }, + { + "desc": "线电压电压变动幅值", + "nameList": [ + "PPFluc" + ] + }, + { + "desc": "相电压电压变动幅值", + "nameList": [ + "PhFluc" + ] + }, + { + "desc": "线电压电压变动频度", + "nameList": [ + "PPFlucf" + ] + }, + { + "desc": "相电压电压变动频度", + "nameList": [ + "PhFlucf" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/tools/pom.xml b/tools/pom.xml index c6245c9..4d7439d 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -19,6 +19,7 @@ activate-tool + mms-mapping wave-tool diff --git a/tools/wave-tool/PARSE_COMTRADE_API.md b/tools/wave-tool/PARSE_COMTRADE_API.md deleted file mode 100644 index 920b321..0000000 --- a/tools/wave-tool/PARSE_COMTRADE_API.md +++ /dev/null @@ -1,266 +0,0 @@ -# parseComtrade API 文档 - -## 1. 接口概述 - -- 接口名称:解析 COMTRADE 波形文件 -- Controller:[WaveController.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/controller/WaveController.java) -- 方法:`parseComtrade` -- 请求路径:`POST /wave/parseComtrade` -- Content-Type:`multipart/form-data` -- 返回类型:`HttpResult` - -用途说明: - -- 上传一组 COMTRADE `cfg/dat` 文件 -- 解析原始波形数据 -- 按请求决定是否补充 RMS 数据、前端查看明细和特征值结果 - -## 2. 请求参数 - -### 2.1 文件参数 - -| 参数名 | 类型 | 必填 | 说明 | -| --- | --- | --- | --- | -| `cfgFile` | file | 是 | COMTRADE 配置文件 `.cfg` | -| `datFile` | file | 是 | COMTRADE 数据文件 `.dat` | - -### 2.2 表单参数 - -参数定义来源:[WaveComtradeParseParam.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/param/WaveComtradeParseParam.java) - -| 参数名 | 类型 | 必填 | 默认值 | 说明 | -| --- | --- | --- | --- | --- | -| `parseType` | integer | 否 | `1` | 解析类型:`0` 高级算法采样率 32-128,`1` 普通展示,`2` App 抽点,`3` 原始波形 | -| `ptType` | integer | 否 | `0` | PT 接线方式:`0` 星形,`1` 三角,`2` 开口三角 | -| `pt` | number | 否 | `1` | PT 变比 | -| `ct` | number | 否 | `1` | CT 变比 | -| `monitorName` | string | 否 | `未命名测点` | 测点名称 | -| `calculateRms` | boolean | 否 | `true` | 是否计算 RMS | -| `buildDetails` | boolean | 否 | `true` | 是否构建前端查看明细 | -| `calculateEigenvalue` | boolean | 否 | `false` | 是否计算特征值 | -| `dynamicThreshold` | boolean | 否 | `true` | 特征值是否使用浮动门槛 | - -## 3. 请求示例 - -```bash -curl -X POST "http://localhost:8080/wave/parseComtrade" \ - -F "cfgFile=@D:/00-B7-8D-00-E4-09/1_20260321_201458_748.CFG" \ - -F "datFile=@D:/00-B7-8D-00-E4-09/1_20260321_201458_748.DAT" \ - -F "parseType=1" \ - -F "ptType=0" \ - -F "pt=1" \ - -F "ct=1" \ - -F "monitorName=监测点1" \ - -F "calculateRms=true" \ - -F "buildDetails=true" \ - -F "calculateEigenvalue=true" \ - -F "dynamicThreshold=true" -``` - -## 4. 响应结构 - -### 4.1 外层响应 - -Controller 返回的是 `HttpResult`。当前仓库内未展开 `HttpResult` 类型源码,本接口文档只对业务 `data` 部分做精确定义。 - -业务数据类型来源:[WaveComtradeResultVO.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/vo/WaveComtradeResultVO.java) - -### 4.2 data 字段定义 - -| 字段名 | 类型 | 说明 | -| --- | --- | --- | -| `waveData` | object | 波形基础数据 | -| `waveDataDetails` | array | 前端查看明细,`buildDetails=true` 时返回 | -| `eigenvalues` | array | 特征值结果,`calculateEigenvalue=true` 时返回 | - -## 5. 业务对象说明 - -### 5.1 waveData - -定义来源:[WaveDataDTO.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/dto/WaveDataDTO.java) - -| 字段名 | 类型 | 说明 | -| --- | --- | --- | -| `comtradeCfgDTO` | object | CFG 解析结果 | -| `waveTitle` | array | 波形标题,例如 `["Time","UA相","UB相"]` | -| `channelNames` | array | 通道名称列表 | -| `listWaveData` | array> | 原始波形数据,首列为时间,后续列为相电压/电流值 | -| `listRmsData` | array> | RMS 波形数据,`calculateRms=true` 时可用 | -| `listRmsMinData` | array> | RMS 最小值摘要 | -| `iPhasic` | integer | 相别数量 | -| `ptType` | integer | PT 接线方式 | -| `pt` | number | PT 变比 | -| `ct` | number | CT 变比 | -| `time` | string | 事件发生时刻 | -| `monitorName` | string | 测点名称 | - -### 5.2 comtradeCfgDTO - -定义来源:[ComtradeCfgDTO.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/dto/ComtradeCfgDTO.java) - -| 字段名 | 类型 | 说明 | -| --- | --- | --- | -| `nChannelNum` | integer | 通道总数 | -| `nPhasic` | integer | 相别数量 | -| `nAnalogNum` | integer | 模拟量通道数 | -| `nDigitalNum` | integer | 开关量通道数 | -| `timeStart` | string/date | 录波开始时间 | -| `timeTrige` | string/date | 触发时间 | -| `lstAnalogDTO` | array | 模拟量通道配置 | -| `lstDigitalDTO` | array | 开关量通道配置 | -| `nRates` | integer | 采样率分段数 | -| `lstRate` | array | 采样率分段配置 | -| `firstTime` | string/date | 首个触发时间对象 | -| `firstMs` | integer | 首个触发毫秒值 | -| `nPush` | integer | 触发前推点数 | -| `finalSampleRate` | integer | 最终采样率 | -| `nAllWaveNum` | integer | 总周波数 | -| `strBinType` | string | 文件编码类型,例如 `BINARY` | - -### 5.3 waveDataDetails - -定义来源:[WaveDataDetail.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/bo/WaveDataDetail.java) - -| 字段名 | 类型 | 说明 | -| --- | --- | --- | -| `instantData` | object | 瞬时波形数据 | -| `rmsData` | object | RMS 波形数据 | -| `a` | string | A 相名称 | -| `b` | string | B 相名称 | -| `c` | string | C 相名称 | -| `channelName` | string | 通道名称 | -| `unit` | string | 单位 | -| `isOpen` | boolean | 是否开口三角模式 | -| `title` | string | 当前图标题 | -| `colors` | array | 曲线颜色 | - -其中 `instantData` 和 `rmsData` 结构一致,定义分别来自: - -- [InstantData.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/bo/InstantData.java) -- [RmsData.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/bo/RmsData.java) - -公共字段: - -| 字段名 | 类型 | 说明 | -| --- | --- | --- | -| `max` | number | 当前曲线最大值 | -| `min` | number | 当前曲线最小值 | -| `aValue` | array> | A 相点位 | -| `bValue` | array> | B 相点位 | -| `cValue` | array> | C 相点位 | - -### 5.4 eigenvalues - -定义来源:[EigenvalueDTO.java](D:/Work/SourceCode/CN_Tool/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/pojo/dto/EigenvalueDTO.java) - -| 字段名 | 类型 | 说明 | -| --- | --- | --- | -| `amplitude` | number | 特征幅值百分比 | -| `residualVoltage` | number | 残余电压 | -| `ratedVoltage` | number | 额定电压 | -| `durationTime` | number | 持续时间 | - -## 6. 成功响应示例 - -以下示例基于真实样本文件联测结果整理,长数组做了截断展示。 - -```json -{ - "code": "SUCCESS", - "message": "成功", - "data": { - "waveData": { - "comtradeCfgDTO": { - "nChannelNum": 6, - "nPhasic": 3, - "nAnalogNum": 6, - "nDigitalNum": 0, - "timeStart": "2026-03-21 20:14:58.648", - "timeTrige": "2026-03-21 20:14:58.748", - "nRates": 1, - "firstMs": 748, - "nPush": 100, - "finalSampleRate": 512, - "nAllWaveNum": 30, - "strBinType": "BINARY" - }, - "waveTitle": ["Time", "UA相", "UB相", "UC相", "IA相", "IB相", "IC相"], - "channelNames": ["/", "U1", "U2", "U3", "I1", "I2", "I3"], - "listWaveData": { - "count": 15616, - "first": [-100.0, -146.56, -76.9, -76.9, -0.13, 0.01, -0.2], - "last": [509.96, 148.02, 69.73, 69.75, 0.16, 0.01, 0.15] - }, - "listRmsData": { - "count": 15616, - "first": [-100.0, 104.94, 104.22, 104.23, 0.27, 0.01, 0.28], - "last": [509.96, 105.6, 105.1, 105.12, 0.24, 0.01, 0.24] - }, - "listRmsMinData": [ - [40.74, 41.2], - [362.19, 0.01] - ], - "iPhasic": 3, - "ptType": 0, - "pt": 1.0, - "ct": 1.0, - "time": "2026-03-21 20:14:58.748", - "monitorName": "监测点1" - }, - "waveDataDetails": [ - { - "channelName": "U1", - "unit": "kV", - "a": "A相", - "b": "B相", - "c": "C相", - "isOpen": false - }, - { - "channelName": "I1", - "unit": "A", - "a": "A相", - "b": "B相", - "c": "C相", - "isOpen": false - } - ], - "eigenvalues": [ - { - "amplitude": 0.3926178, - "residualVoltage": 41.200005, - "ratedVoltage": 104.936676, - "durationTime": 48.632812 - }, - { - "amplitude": 0.4067544, - "residualVoltage": 42.390152, - "ratedVoltage": 104.21559, - "durationTime": 54.492188 - }, - { - "amplitude": 0.40674016, - "residualVoltage": 42.396355, - "ratedVoltage": 104.2345, - "durationTime": 54.492188 - } - ] - } -} -``` - -## 7. 失败场景 - -基于当前代码,常见失败场景包括: - -| 场景 | 说明 | -| --- | --- | -| `cfgFile` 或 `datFile` 未上传 | 返回业务异常,提示“cfg 或 dat 文件不能为空” | -| CFG 文件格式错误 | 返回 CFG 解析失败 | -| DAT 文件为空或格式错误 | 返回 DAT 解析失败 | -| COMTRADE 解析过程中出现异常 | 返回“COMTRADE 波形解析失败” | - -## 8. 备注 - -- 当前接口已经移除图片生成相关参数,不再支持 `generateInstantImage`、`generateRmsImage` 等旧字段。 -- 当前接口文档只覆盖 `parseComtrade`,其他波形文本解析接口请单独编写。 diff --git a/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/component/WaveVectorComponent.java b/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/component/WaveVectorComponent.java index 15e8396..86c2f01 100644 --- a/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/component/WaveVectorComponent.java +++ b/tools/wave-tool/src/main/java/com/njcn/gather/tool/wave/component/WaveVectorComponent.java @@ -297,7 +297,7 @@ public class WaveVectorComponent { private float resolveVectorRatio(WaveDataDTO waveDataDTO, int titleIndex) { if (waveDataDTO.getWaveTitle() != null && waveDataDTO.getWaveTitle().size() > titleIndex && StrUtil.startWithIgnoreCase(waveDataDTO.getWaveTitle().get(titleIndex), "U")) { - return waveDataDTO.getPt() == null ? 1F : waveDataDTO.getPt().floatValue() / 1000F; + return waveDataDTO.getPt() == null ? 1F : waveDataDTO.getPt().floatValue() ; } return waveDataDTO.getCt() == null ? 1F : waveDataDTO.getCt().floatValue(); }