You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2021/01/23 12:07:54 UTC
[plc4x] 01/02: Merge branch 'develop' into
feature/native_opua_client
This is an automated email from the ASF dual-hosted git repository.
hutcheb pushed a commit to branch feature/native_opua_client
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit a6e41a9f0691aa33cf4c612b71c7482f6fe898ba
Merge: 11b9d51 0baecae
Author: hutcheb <be...@gmail.com>
AuthorDate: Fri Jan 22 07:04:00 2021 -0500
Merge branch 'develop' into feature/native_opua_client
LICENSE | 1 +
NOTICE | 5 +-
RELEASE_NOTES | 2 +
.../language/go/GoLanguageTemplateHelper.java | 25 +-
.../main/resources/templates/go/enum-template.ftlh | 16 +-
.../templates/go/parser-factory-template.ftlh | 2 +-
plc4go/cmd/main/drivers/bacnetip_test.go | 2 +-
plc4go/cmd/main/drivers/knxnetip_test.go | 433 +-
plc4go/cmd/main/drivers/modbus_test.go | 8 +-
plc4go/cmd/main/drivers/s7_test.go | 2 +-
.../cmd/main/drivers/tests/knx_discovery_test.go | 1224 ++--
.../cmd/main/drivers/tests/modbus_driver_test.go | 2 +-
.../drivers/tests/modbus_parser_serializer_test.go | 2 +-
plc4go/go.sum | 1 +
.../plc4go/bacnetip/readwrite/ParserHelper.go | 2 +-
.../plc4go/bacnetip/readwrite/model/APDU.go | 2 +-
.../plc4go/bacnetip/readwrite/model/APDUAbort.go | 4 +-
.../bacnetip/readwrite/model/APDUComplexAck.go | 4 +-
.../readwrite/model/APDUConfirmedRequest.go | 4 +-
.../plc4go/bacnetip/readwrite/model/APDUError.go | 4 +-
.../plc4go/bacnetip/readwrite/model/APDUReject.go | 4 +-
.../bacnetip/readwrite/model/APDUSegmentAck.go | 4 +-
.../bacnetip/readwrite/model/APDUSimpleAck.go | 4 +-
.../readwrite/model/APDUUnconfirmedRequest.go | 4 +-
.../bacnetip/readwrite/model/ApplicationTag.go | 38 +-
.../bacnetip/readwrite/model/BACnetAddress.go | 2 +-
.../readwrite/model/BACnetConfirmedServiceACK.go | 2 +-
.../BACnetConfirmedServiceACKAtomicReadFile.go | 2 +-
.../BACnetConfirmedServiceACKAtomicWriteFile.go | 2 +-
...tConfirmedServiceACKConfirmedPrivateTransfer.go | 2 +-
.../model/BACnetConfirmedServiceACKCreateObject.go | 2 +-
.../BACnetConfirmedServiceACKGetAlarmSummary.go | 2 +-
...ACnetConfirmedServiceACKGetEnrollmentSummary.go | 2 +-
...BACnetConfirmedServiceACKGetEventInformation.go | 2 +-
.../model/BACnetConfirmedServiceACKReadProperty.go | 2 +-
...ACnetConfirmedServiceACKReadPropertyMultiple.go | 2 +-
.../model/BACnetConfirmedServiceACKReadRange.go | 2 +-
...BACnetConfirmedServiceACKRemovedAuthenticate.go | 2 +-
...rmedServiceACKRemovedReadPropertyConditional.go | 2 +-
.../model/BACnetConfirmedServiceACKVTData.go | 2 +-
.../model/BACnetConfirmedServiceACKVTOpen.go | 2 +-
.../model/BACnetConfirmedServiceRequest.go | 2 +-
...ACnetConfirmedServiceRequestAcknowledgeAlarm.go | 2 +-
.../BACnetConfirmedServiceRequestAddListElement.go | 2 +-
.../BACnetConfirmedServiceRequestAtomicReadFile.go | 2 +-
...BACnetConfirmedServiceRequestAtomicWriteFile.go | 2 +-
...firmedServiceRequestConfirmedCOVNotification.go | 2 +-
...rviceRequestConfirmedCOVNotificationMultiple.go | 2 +-
...rmedServiceRequestConfirmedEventNotification.go | 2 +-
...firmedServiceRequestConfirmedPrivateTransfer.go | 2 +-
...tConfirmedServiceRequestConfirmedTextMessage.go | 2 +-
.../BACnetConfirmedServiceRequestCreateObject.go | 2 +-
.../BACnetConfirmedServiceRequestDeleteObject.go | 2 +-
...rmedServiceRequestDeviceCommunicationControl.go | 2 +-
...tConfirmedServiceRequestGetEnrollmentSummary.go | 2 +-
...etConfirmedServiceRequestGetEventInformation.go | 2 +-
...etConfirmedServiceRequestLifeSafetyOperation.go | 2 +-
.../BACnetConfirmedServiceRequestReadProperty.go | 2 +-
...tConfirmedServiceRequestReadPropertyMultiple.go | 2 +-
.../BACnetConfirmedServiceRequestReadRange.go | 2 +-
...netConfirmedServiceRequestReinitializeDevice.go | 2 +-
...CnetConfirmedServiceRequestRemoveListElement.go | 2 +-
...etConfirmedServiceRequestRemovedAuthenticate.go | 2 +-
...ServiceRequestRemovedReadPropertyConditional.go | 2 +-
...CnetConfirmedServiceRequestRemovedRequestKey.go | 2 +-
.../BACnetConfirmedServiceRequestSubscribeCOV.go | 2 +-
...tConfirmedServiceRequestSubscribeCOVProperty.go | 2 +-
...edServiceRequestSubscribeCOVPropertyMultiple.go | 2 +-
.../model/BACnetConfirmedServiceRequestVTClose.go | 2 +-
.../model/BACnetConfirmedServiceRequestVTData.go | 2 +-
.../model/BACnetConfirmedServiceRequestVTOpen.go | 2 +-
.../BACnetConfirmedServiceRequestWriteProperty.go | 2 +-
...ConfirmedServiceRequestWritePropertyMultiple.go | 2 +-
.../plc4go/bacnetip/readwrite/model/BACnetError.go | 2 +-
.../readwrite/model/BACnetErrorAtomicReadFile.go | 2 +-
.../readwrite/model/BACnetErrorAtomicWriteFile.go | 2 +-
.../model/BACnetErrorConfirmedPrivateTransfer.go | 2 +-
.../readwrite/model/BACnetErrorCreateObject.go | 2 +-
.../readwrite/model/BACnetErrorGetAlarmSummary.go | 2 +-
.../model/BACnetErrorGetEnrollmentSummary.go | 2 +-
.../model/BACnetErrorGetEventInformation.go | 2 +-
.../readwrite/model/BACnetErrorReadProperty.go | 2 +-
.../model/BACnetErrorReadPropertyMultiple.go | 2 +-
.../readwrite/model/BACnetErrorReadRange.go | 2 +-
.../model/BACnetErrorRemovedAuthenticate.go | 2 +-
.../BACnetErrorRemovedReadPropertyConditional.go | 2 +-
.../bacnetip/readwrite/model/BACnetErrorVTData.go | 2 +-
.../bacnetip/readwrite/model/BACnetErrorVTOpen.go | 2 +-
.../bacnetip/readwrite/model/BACnetNetworkType.go | 34 +-
.../bacnetip/readwrite/model/BACnetNodeType.go | 56 +-
.../bacnetip/readwrite/model/BACnetNotifyType.go | 18 +-
.../bacnetip/readwrite/model/BACnetObjectType.go | 130 +-
.../bacnetip/readwrite/model/BACnetServiceAck.go | 2 +-
.../model/BACnetServiceAckAtomicReadFile.go | 2 +-
.../model/BACnetServiceAckAtomicWriteFile.go | 2 +-
.../BACnetServiceAckConfirmedPrivateTransfer.go | 2 +-
.../model/BACnetServiceAckCreateObject.go | 2 +-
.../model/BACnetServiceAckGetAlarmSummary.go | 2 +-
.../model/BACnetServiceAckGetEnrollmentSummary.go | 2 +-
.../model/BACnetServiceAckGetEventInformation.go | 2 +-
.../model/BACnetServiceAckReadProperty.go | 2 +-
.../model/BACnetServiceAckReadPropertyMultiple.go | 2 +-
.../readwrite/model/BACnetServiceAckReadRange.go | 2 +-
.../model/BACnetServiceAckRemovedAuthenticate.go | 2 +-
...CnetServiceAckRemovedReadPropertyConditional.go | 2 +-
.../readwrite/model/BACnetServiceAckVTData.go | 2 +-
.../readwrite/model/BACnetServiceAckVTOpen.go | 2 +-
.../plc4go/bacnetip/readwrite/model/BACnetTag.go | 2 +-
.../model/BACnetTagApplicationBitString.go | 2 +-
.../readwrite/model/BACnetTagApplicationBoolean.go | 2 +-
.../model/BACnetTagApplicationCharacterString.go | 2 +-
.../readwrite/model/BACnetTagApplicationDate.go | 2 +-
.../readwrite/model/BACnetTagApplicationDouble.go | 2 +-
.../model/BACnetTagApplicationEnumerated.go | 2 +-
.../readwrite/model/BACnetTagApplicationNull.go | 2 +-
.../model/BACnetTagApplicationObjectIdentifier.go | 2 +-
.../model/BACnetTagApplicationOctetString.go | 2 +-
.../readwrite/model/BACnetTagApplicationReal.go | 2 +-
.../model/BACnetTagApplicationSignedInteger.go | 2 +-
.../readwrite/model/BACnetTagApplicationTime.go | 2 +-
.../model/BACnetTagApplicationUnsignedInteger.go | 2 +-
.../bacnetip/readwrite/model/BACnetTagContext.go | 2 +-
.../readwrite/model/BACnetTagWithContent.go | 2 +-
.../model/BACnetUnconfirmedServiceRequest.go | 2 +-
.../model/BACnetUnconfirmedServiceRequestIAm.go | 2 +-
.../model/BACnetUnconfirmedServiceRequestIHave.go | 2 +-
...UnconfirmedServiceRequestTimeSynchronization.go | 2 +-
...onfirmedServiceRequestUTCTimeSynchronization.go | 2 +-
...rmedServiceRequestUnconfirmedCOVNotification.go | 2 +-
...iceRequestUnconfirmedCOVNotificationMultiple.go | 2 +-
...edServiceRequestUnconfirmedEventNotification.go | 2 +-
...rmedServiceRequestUnconfirmedPrivateTransfer.go | 2 +-
...onfirmedServiceRequestUnconfirmedTextMessage.go | 2 +-
.../model/BACnetUnconfirmedServiceRequestWhoHas.go | 2 +-
.../model/BACnetUnconfirmedServiceRequestWhoIs.go | 2 +-
.../BACnetUnconfirmedServiceRequestWriteGroup.go | 2 +-
.../plc4go/bacnetip/readwrite/model/BVLC.go | 2 +-
.../model/BVLCDeleteForeignDeviceTableEntry.go | 2 +-
.../model/BVLCDistributeBroadcastToNetwork.go | 2 +-
.../bacnetip/readwrite/model/BVLCForwardedNPDU.go | 2 +-
.../readwrite/model/BVLCOriginalBroadcastNPDU.go | 2 +-
.../readwrite/model/BVLCOriginalUnicastNPDU.go | 2 +-
.../model/BVLCReadBroadcastDistributionTable.go | 2 +-
.../model/BVLCReadBroadcastDistributionTableAck.go | 2 +-
.../readwrite/model/BVLCReadForeignDeviceTable.go | 2 +-
.../model/BVLCReadForeignDeviceTableAck.go | 2 +-
.../readwrite/model/BVLCRegisterForeignDevice.go | 2 +-
.../plc4go/bacnetip/readwrite/model/BVLCResult.go | 2 +-
.../bacnetip/readwrite/model/BVLCSecureBVLL.go | 2 +-
.../model/BVLCWideBroadcastDistributionTable.go | 2 +-
.../plc4go/bacnetip/readwrite/model/NLM.go | 2 +-
.../readwrite/model/NLMIAmRouterToNetwork.go | 2 +-
.../readwrite/model/NLMWhoIsRouterToNetwork.go | 2 +-
.../plc4go/bacnetip/readwrite/model/NPDU.go | 4 +-
.../readwrite/model/KnxManufacturers.go | 4380 ------------
.../readwrite/model/KnxObjectProperties.go | 1378 ----
.../knxmasterdata/readwrite/model/KnxObjectType.go | 268 -
plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go | 241 +
.../internal/plc4go/knxnetip/KnxNetIpConnection.go | 978 +--
.../internal/plc4go/knxnetip/KnxNetIpDiscoverer.go | 148 +
plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go | 99 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpField.go | 101 +-
.../plc4go/knxnetip/KnxNetIpFieldHandler.go | 101 +-
.../plc4go/knxnetip/KnxNetIpMessageCodec.go | 154 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go | 554 +-
.../internal/plc4go/knxnetip/KnxNetIpSubscriber.go | 220 +-
.../plc4go/knxnetip/KnxNetIpSubscriptionEvent.go | 4 +-
.../plc4go/knxnetip/KnxNetIpValueHandler.go | 15 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go | 54 +-
plc4go/internal/plc4go/knxnetip/Utils.go | 42 +
.../plc4go/knxnetip/readwrite/ParserHelper.go | 124 +-
.../knxnetip/readwrite/PropertyDataTypeIO.go | 156 +
.../plc4go/knxnetip/readwrite/XmlParserHelper.go | 338 +-
.../plc4go/knxnetip/readwrite/model/APCI.go | 44 +-
.../plc4go/knxnetip/readwrite/model/CEMI.go | 2 +-
.../readwrite/model/CEMIAdditionalInformation.go | 2 +-
.../CEMIAdditionalInformationBusmonitorInfo.go | 2 +-
.../CEMIAdditionalInformationRelativeTimestamp.go | 2 +-
.../knxnetip/readwrite/model/CEMIPriority.go | 20 +-
.../knxnetip/readwrite/model/ConnectionRequest.go | 2 +-
.../model/ConnectionRequestInformation.go | 2 +-
...ConnectionRequestInformationDeviceManagement.go | 2 +-
...ConnectionRequestInformationTunnelConnection.go | 4 +-
.../knxnetip/readwrite/model/ConnectionResponse.go | 2 +-
.../readwrite/model/ConnectionResponseDataBlock.go | 2 +-
.../ConnectionResponseDataBlockDeviceManagement.go | 2 +-
.../ConnectionResponseDataBlockTunnelConnection.go | 2 +-
.../readwrite/model/ConnectionStateRequest.go | 4 +-
.../readwrite/model/ConnectionStateResponse.go | 2 +-
.../plc4go/knxnetip/readwrite/model/ControlType.go | 20 +-
.../knxnetip/readwrite/model/DIBDeviceInfo.go | 2 +-
.../knxnetip/readwrite/model/DIBSuppSvcFamilies.go | 2 +-
.../knxnetip/readwrite/model/DescriptionRequest.go | 2 +-
.../readwrite/model/DescriptionResponse.go | 2 +-
.../readwrite/model/DeviceConfigurationAck.go | 2 +-
.../model/DeviceConfigurationAckDataBlock.go | 2 +-
.../readwrite/model/DeviceConfigurationRequest.go | 2 +-
.../model/DeviceConfigurationRequestDataBlock.go | 4 +-
.../knxnetip/readwrite/model/DeviceStatus.go | 4 +-
.../knxnetip/readwrite/model/DisconnectRequest.go | 4 +-
.../knxnetip/readwrite/model/DisconnectResponse.go | 2 +-
.../knxnetip/readwrite/model/ExtendedAPCI.go | 94 +-
.../readwrite/model/HPAIControlEndpoint.go | 2 +-
.../knxnetip/readwrite/model/HPAIDataEndpoint.go | 2 +-
.../readwrite/model/HPAIDiscoveryEndpoint.go | 2 +-
.../knxnetip/readwrite/model/HostProtocolCode.go | 16 +-
.../plc4go/knxnetip/readwrite/model/IPAddress.go | 2 +-
.../plc4go/knxnetip/readwrite/model/KnxAddress.go | 2 +-
.../knxnetip/readwrite/model/KnxDatapoint.go | 4 +-
.../readwrite/model/KnxDatapointSubtype.go | 5260 +++++++++++++++
.../knxnetip/readwrite/model/KnxDatapointType.go | 5596 +++------------
.../knxnetip/readwrite/model/KnxGroupAddress.go | 2 +-
.../readwrite/model/KnxGroupAddress2Level.go | 2 +-
.../readwrite/model/KnxGroupAddress3Level.go | 2 +-
.../readwrite/model/KnxGroupAddressFreeLevel.go | 2 +-
.../readwrite/model/KnxInterfaceObjectProperty.go | 4221 ++++++++++++
.../readwrite/model/KnxInterfaceObjectType.go | 424 ++
.../plc4go/knxnetip/readwrite/model/KnxLayer.go | 18 +-
.../knxnetip/readwrite/model/KnxManufacturer.go | 7093 ++++++++++++++++++++
.../plc4go/knxnetip/readwrite/model/KnxMedium.go | 24 +-
.../knxnetip/readwrite/model/KnxNetIpCore.go | 2 +-
.../readwrite/model/KnxNetIpDeviceManagement.go | 2 +-
.../knxnetip/readwrite/model/KnxNetIpMessage.go | 2 +-
.../knxnetip/readwrite/model/KnxNetIpTunneling.go | 2 +-
.../knxnetip/readwrite/model/KnxNetObjectServer.go | 2 +-
.../model/KnxNetRemoteConfigurationAndDiagnosis.go | 2 +-
.../readwrite/model/KnxNetRemoteLogging.go | 2 +-
.../readwrite/model/KnxPropertyDataType.go | 908 +++
.../plc4go/knxnetip/readwrite/model/LBusmonInd.go | 2 +-
.../plc4go/knxnetip/readwrite/model/LDataCon.go | 2 +-
.../plc4go/knxnetip/readwrite/model/LDataFrame.go | 2 +-
.../knxnetip/readwrite/model/LDataFrameAck.go | 2 +-
.../knxnetip/readwrite/model/LDataFrameData.go | 2 +-
.../knxnetip/readwrite/model/LDataFrameDataExt.go | 2 +-
.../readwrite/model/LDataFramePollingData.go | 4 +-
.../plc4go/knxnetip/readwrite/model/LDataInd.go | 2 +-
.../plc4go/knxnetip/readwrite/model/LDataReq.go | 2 +-
.../knxnetip/readwrite/model/LPollDataCon.go | 2 +-
.../knxnetip/readwrite/model/LPollDataReq.go | 2 +-
.../plc4go/knxnetip/readwrite/model/LRawCon.go | 2 +-
.../plc4go/knxnetip/readwrite/model/LRawInd.go | 2 +-
.../plc4go/knxnetip/readwrite/model/LRawReq.go | 2 +-
.../plc4go/knxnetip/readwrite/model/MACAddress.go | 2 +-
.../readwrite/model/MFuncPropCommandReq.go | 2 +-
.../knxnetip/readwrite/model/MFuncPropCon.go | 2 +-
.../readwrite/model/MFuncPropStateReadReq.go | 2 +-
.../knxnetip/readwrite/model/MPropInfoInd.go | 2 +-
.../knxnetip/readwrite/model/MPropReadCon.go | 2 +-
.../knxnetip/readwrite/model/MPropReadReq.go | 2 +-
.../knxnetip/readwrite/model/MPropWriteCon.go | 2 +-
.../knxnetip/readwrite/model/MPropWriteReq.go | 2 +-
.../plc4go/knxnetip/readwrite/model/MResetInd.go | 2 +-
.../plc4go/knxnetip/readwrite/model/MResetReq.go | 2 +-
.../model/ProjectInstallationIdentifier.go | 2 +-
.../knxnetip/readwrite/model/RelativeTimestamp.go | 2 +-
.../knxnetip/readwrite/model/RoutingIndication.go | 2 +-
.../knxnetip/readwrite/model/SearchRequest.go | 2 +-
.../knxnetip/readwrite/model/SearchResponse.go | 2 +-
.../plc4go/knxnetip/readwrite/model/ServiceId.go | 2 +-
.../plc4go/knxnetip/readwrite/model/Status.go | 36 +-
.../readwrite/model/SupportedPhysicalMedia.go | 54 +-
.../knxnetip/readwrite/model/TDataConnectedInd.go | 2 +-
.../knxnetip/readwrite/model/TDataConnectedReq.go | 2 +-
.../knxnetip/readwrite/model/TDataIndividualInd.go | 2 +-
.../knxnetip/readwrite/model/TDataIndividualReq.go | 2 +-
.../knxnetip/readwrite/model/TunnelingRequest.go | 2 +-
.../readwrite/model/TunnelingRequestDataBlock.go | 4 +-
.../knxnetip/readwrite/model/TunnelingResponse.go | 2 +-
.../readwrite/model/TunnelingResponseDataBlock.go | 2 +-
.../knxnetip/readwrite/model/UnknownMessage.go | 2 +-
plc4go/internal/plc4go/modbus/ModbusConnection.go | 53 +-
plc4go/internal/plc4go/modbus/ModbusDriver.go | 29 +-
.../internal/plc4go/modbus/ModbusFieldHandler.go | 22 +-
.../internal/plc4go/modbus/ModbusMessageCodec.go | 87 +-
plc4go/internal/plc4go/modbus/ModbusReader.go | 67 +-
.../internal/plc4go/modbus/ModbusValueHandler.go | 2 +-
plc4go/internal/plc4go/modbus/ModbusWriter.go | 74 +-
.../plc4go/modbus/readwrite/ParserHelper.go | 2 +-
.../plc4go/modbus/readwrite/model/DataItem.go | 4 +-
.../modbus/readwrite/model/ModbusConstants.go | 2 +-
.../modbus/readwrite/model/ModbusDataTypeSizes.go | 64 +-
.../modbus/readwrite/model/ModbusErrorCode.go | 32 +-
.../plc4go/modbus/readwrite/model/ModbusPDU.go | 2 +-
.../readwrite/model/ModbusPDUDiagnosticRequest.go | 2 +-
.../readwrite/model/ModbusPDUDiagnosticResponse.go | 2 +-
.../modbus/readwrite/model/ModbusPDUError.go | 2 +-
.../model/ModbusPDUGetComEventCounterRequest.go | 2 +-
.../model/ModbusPDUGetComEventCounterResponse.go | 2 +-
.../model/ModbusPDUGetComEventLogRequest.go | 2 +-
.../model/ModbusPDUGetComEventLogResponse.go | 2 +-
.../ModbusPDUMaskWriteHoldingRegisterRequest.go | 2 +-
.../ModbusPDUMaskWriteHoldingRegisterResponse.go | 2 +-
.../readwrite/model/ModbusPDUReadCoilsRequest.go | 2 +-
.../readwrite/model/ModbusPDUReadCoilsResponse.go | 2 +-
.../ModbusPDUReadDeviceIdentificationRequest.go | 2 +-
.../ModbusPDUReadDeviceIdentificationResponse.go | 2 +-
.../model/ModbusPDUReadDiscreteInputsRequest.go | 2 +-
.../model/ModbusPDUReadDiscreteInputsResponse.go | 2 +-
.../model/ModbusPDUReadExceptionStatusRequest.go | 2 +-
.../model/ModbusPDUReadExceptionStatusResponse.go | 2 +-
.../model/ModbusPDUReadFifoQueueRequest.go | 2 +-
.../model/ModbusPDUReadFifoQueueResponse.go | 2 +-
.../model/ModbusPDUReadFileRecordRequest.go | 2 +-
.../model/ModbusPDUReadFileRecordRequestItem.go | 2 +-
.../model/ModbusPDUReadFileRecordResponse.go | 2 +-
.../model/ModbusPDUReadFileRecordResponseItem.go | 2 +-
.../model/ModbusPDUReadHoldingRegistersRequest.go | 2 +-
.../model/ModbusPDUReadHoldingRegistersResponse.go | 2 +-
.../model/ModbusPDUReadInputRegistersRequest.go | 2 +-
.../model/ModbusPDUReadInputRegistersResponse.go | 2 +-
...sPDUReadWriteMultipleHoldingRegistersRequest.go | 2 +-
...PDUReadWriteMultipleHoldingRegistersResponse.go | 2 +-
.../model/ModbusPDUReportServerIdRequest.go | 2 +-
.../model/ModbusPDUReportServerIdResponse.go | 2 +-
.../model/ModbusPDUWriteFileRecordRequest.go | 2 +-
.../model/ModbusPDUWriteFileRecordRequestItem.go | 2 +-
.../model/ModbusPDUWriteFileRecordResponse.go | 2 +-
.../model/ModbusPDUWriteFileRecordResponseItem.go | 2 +-
.../model/ModbusPDUWriteMultipleCoilsRequest.go | 2 +-
.../model/ModbusPDUWriteMultipleCoilsResponse.go | 2 +-
...odbusPDUWriteMultipleHoldingRegistersRequest.go | 2 +-
...dbusPDUWriteMultipleHoldingRegistersResponse.go | 2 +-
.../model/ModbusPDUWriteSingleCoilRequest.go | 2 +-
.../model/ModbusPDUWriteSingleCoilResponse.go | 2 +-
.../model/ModbusPDUWriteSingleRegisterRequest.go | 2 +-
.../model/ModbusPDUWriteSingleRegisterResponse.go | 2 +-
.../modbus/readwrite/model/ModbusSerialADU.go | 4 +-
.../plc4go/modbus/readwrite/model/ModbusTcpADU.go | 2 +-
.../plc4go/model/DefaultPlcSubscriptionEvent.go | 108 -
.../plc4go/model/DefaultPlcSubscriptionRequest.go | 160 -
.../internal/plc4go/model/values/PlcBitString.go | 93 -
.../internal/plc4go/s7/readwrite/ParserHelper.go | 2 +-
.../plc4go/s7/readwrite/model/COTPPacket.go | 2 +-
.../readwrite/model/COTPPacketConnectionRequest.go | 2 +-
.../model/COTPPacketConnectionResponse.go | 2 +-
.../plc4go/s7/readwrite/model/COTPPacketData.go | 2 +-
.../readwrite/model/COTPPacketDisconnectRequest.go | 2 +-
.../model/COTPPacketDisconnectResponse.go | 2 +-
.../s7/readwrite/model/COTPPacketTpduError.go | 2 +-
.../plc4go/s7/readwrite/model/COTPParameter.go | 2 +-
.../s7/readwrite/model/COTPParameterCalledTsap.go | 2 +-
.../s7/readwrite/model/COTPParameterCallingTsap.go | 2 +-
.../s7/readwrite/model/COTPParameterChecksum.go | 2 +-
...COTPParameterDisconnectAdditionalInformation.go | 2 +-
.../s7/readwrite/model/COTPParameterTpduSize.go | 2 +-
.../plc4go/s7/readwrite/model/COTPProtocolClass.go | 22 +-
.../plc4go/s7/readwrite/model/COTPTpduSize.go | 26 +-
.../internal/plc4go/s7/readwrite/model/DataItem.go | 4 +-
.../s7/readwrite/model/DataTransportErrorCode.go | 24 +-
.../plc4go/s7/readwrite/model/DataTransportSize.go | 26 +-
.../plc4go/s7/readwrite/model/DeviceGroup.go | 18 +-
.../plc4go/s7/readwrite/model/MemoryArea.go | 30 +-
.../plc4go/s7/readwrite/model/S7Address.go | 2 +-
.../plc4go/s7/readwrite/model/S7AddressAny.go | 4 +-
.../plc4go/s7/readwrite/model/S7Message.go | 6 +-
.../plc4go/s7/readwrite/model/S7MessageRequest.go | 2 +-
.../plc4go/s7/readwrite/model/S7MessageResponse.go | 2 +-
.../s7/readwrite/model/S7MessageResponseData.go | 2 +-
.../plc4go/s7/readwrite/model/S7MessageUserData.go | 2 +-
.../plc4go/s7/readwrite/model/S7Parameter.go | 2 +-
.../readwrite/model/S7ParameterReadVarRequest.go | 2 +-
.../readwrite/model/S7ParameterReadVarResponse.go | 2 +-
.../model/S7ParameterSetupCommunication.go | 4 +-
.../s7/readwrite/model/S7ParameterUserData.go | 2 +-
.../s7/readwrite/model/S7ParameterUserDataItem.go | 2 +-
.../model/S7ParameterUserDataItemCPUFunctions.go | 2 +-
.../readwrite/model/S7ParameterWriteVarRequest.go | 2 +-
.../readwrite/model/S7ParameterWriteVarResponse.go | 2 +-
.../plc4go/s7/readwrite/model/S7Payload.go | 2 +-
.../s7/readwrite/model/S7PayloadReadVarResponse.go | 2 +-
.../plc4go/s7/readwrite/model/S7PayloadUserData.go | 2 +-
.../s7/readwrite/model/S7PayloadUserDataItem.go | 2 +-
...PayloadUserDataItemCpuFunctionReadSzlRequest.go | 2 +-
...ayloadUserDataItemCpuFunctionReadSzlResponse.go | 2 +-
.../s7/readwrite/model/S7PayloadWriteVarRequest.go | 2 +-
.../readwrite/model/S7PayloadWriteVarResponse.go | 2 +-
.../plc4go/s7/readwrite/model/S7StaticHelper.go | 4 +-
.../s7/readwrite/model/S7VarPayloadDataItem.go | 2 +-
.../s7/readwrite/model/S7VarPayloadStatusItem.go | 2 +-
.../readwrite/model/S7VarRequestParameterItem.go | 2 +-
.../model/S7VarRequestParameterItemAddress.go | 2 +-
.../plc4go/s7/readwrite/model/SzlDataTreeItem.go | 2 +-
plc4go/internal/plc4go/s7/readwrite/model/SzlId.go | 2 +-
.../s7/readwrite/model/SzlModuleTypeClass.go | 20 +-
.../plc4go/s7/readwrite/model/SzlSublist.go | 50 +-
.../plc4go/s7/readwrite/model/TPKTPacket.go | 4 +-
.../plc4go/s7/readwrite/model/TransportSize.go | 40 +-
plc4go/internal/plc4go/spi/Message.go | 4 +-
plc4go/internal/plc4go/spi/MessageCodec.go | 24 +-
.../{TransportInstanceExposer.go => PlcBrowser.go} | 6 +-
.../plc4go/spi/PlcDiscoverer.go} | 7 +-
plc4go/internal/plc4go/spi/PlcSubscriber.go | 2 +-
.../plc4go/spi/TransportInstanceExposer.go | 4 +-
.../interceptors/SingleItemRequestInterceptor.go | 2 +-
.../plc4go/spi/model/DefaultBrowseRequest.go | 102 +
.../model/DefaultPlcDiscoveryEvent.go} | 36 +-
.../{ => spi}/model/DefaultPlcReadRequest.go | 0
.../{ => spi}/model/DefaultPlcReadResponse.go | 0
.../model/DefaultPlcSubscriptionEvent.go} | 66 +-
.../spi/model/DefaultPlcSubscriptionRequest.go | 160 +
.../model/DefaultPlcSubscriptionResponse.go | 4 +-
.../{ => spi}/model/DefaultPlcWriteRequest.go | 2 +-
.../{ => spi}/model/DefaultPlcWriteResponse.go | 0
.../plc4go/{ => spi}/model/RequestInterceptor.go | 0
.../plc4go/{ => spi}/testutils/DriverTestRunner.go | 32 +-
.../testutils/ParserSerializerTestRunner.go | 20 +-
.../plc4go/{ => spi}/testutils/TestUtils.go | 0
.../plc4go/{ => spi}/transports/Transport.go | 10 +-
.../{ => spi}/transports/TransportInstance.go | 0
.../plc4go/spi/transports/tcp/TcpTransport.go | 188 +
.../{ => spi}/transports/test/TestTransport.go | 2 +-
.../plc4go/spi/transports/udp/UdpTransport.go | 217 +
.../internal/plc4go/{ => spi}/utils/CastUtils.go | 20 +-
.../internal/plc4go/{ => spi}/utils/ReadBuffer.go | 0
.../plc4go/{utils/Utils.go => spi/utils/Regexp.go} | 18 +-
.../plc4go/{ => spi}/utils/Serializable.go | 2 +-
plc4go/internal/plc4go/{ => spi}/utils/Utils.go | 0
.../internal/plc4go/{ => spi}/utils/WriteBuffer.go | 0
.../internal/plc4go/{model => spi}/values/BOOL.go | 0
.../internal/plc4go/{model => spi}/values/BYTE.go | 0
.../internal/plc4go/{model => spi}/values/CHAR.go | 0
.../internal/plc4go/{model => spi}/values/DATE.go | 26 +-
.../plc4go/{model => spi}/values/DATE_AND_TIME.go | 0
.../internal/plc4go/{model => spi}/values/DINT.go | 0
.../internal/plc4go/{model => spi}/values/DWORD.go | 0
.../{model => spi}/values/IEC61131ValueHandler.go | 0
.../internal/plc4go/{model => spi}/values/INT.go | 0
.../internal/plc4go/{model => spi}/values/LINT.go | 0
.../internal/plc4go/{model => spi}/values/LREAL.go | 0
.../internal/plc4go/{model => spi}/values/LTIME.go | 0
.../internal/plc4go/{model => spi}/values/LWORD.go | 0
.../internal/plc4go/{model => spi}/values/NULL.go | 0
.../PlcList.go => spi/values/PlcBitString.go} | 47 +-
.../plc4go/{model => spi}/values/PlcByteArray.go | 0
.../plc4go/{model => spi}/values/PlcList.go | 0
.../{model => spi}/values/PlcSimpleValueAdapter.go | 0
.../plc4go/{model => spi}/values/PlcStruct.go | 24 +-
.../{model => spi}/values/PlcValueAdapter.go | 0
.../internal/plc4go/{model => spi}/values/REAL.go | 0
.../internal/plc4go/{model => spi}/values/SINT.go | 0
.../plc4go/{model => spi}/values/STRING.go | 0
.../internal/plc4go/{model => spi}/values/TIME.go | 0
.../plc4go/{model => spi}/values/TIME_OF_DAY.go | 30 +-
.../internal/plc4go/{model => spi}/values/UDINT.go | 0
.../internal/plc4go/{model => spi}/values/UINT.go | 0
.../internal/plc4go/{model => spi}/values/ULINT.go | 0
.../internal/plc4go/{model => spi}/values/USINT.go | 0
.../internal/plc4go/{model => spi}/values/WCHAR.go | 0
.../internal/plc4go/{model => spi}/values/WORD.go | 0
.../plc4go/{model => spi}/values/WSTRING.go | 0
.../internal/plc4go/transports/tcp/TcpTransport.go | 188 -
.../internal/plc4go/transports/udp/UdpTransport.go | 190 -
plc4go/internal/plc4go/utils/Regexp.go | 35 -
plc4go/pkg/plc4go/connection.go | 2 +
plc4go/pkg/plc4go/driver.go | 21 +-
plc4go/pkg/plc4go/driverManager.go | 238 +-
.../model/{plc_read_request.go => plc_browse.go} | 35 +-
plc4go/pkg/plc4go/model/plc_connection_metadata.go | 7 +-
.../plc4go/model/plc_discovery.go} | 26 +-
.../model/{plc_read_request.go => plc_read.go} | 12 +-
plc4go/pkg/plc4go/model/plc_read_response.go | 29 -
...subscription_request.go => plc_subscription.go} | 46 +-
plc4go/pkg/plc4go/model/plc_subscription_event.go | 31 -
.../pkg/plc4go/model/plc_subscription_response.go | 25 -
...bscription_request.go => plc_unsubscription.go} | 3 +
.../model/{plc_write_request.go => plc_write.go} | 3 +
plc4go/pkg/plc4go/model/plc_write_response.go | 22 -
plc4go/pkg/plc4go/transports/transports.go | 4 +-
plc4go/pom.xml | 2 +-
.../org/apache/plc4x/java/abeth/AbEthDriver.java | 9 +
.../org/apache/plc4x/java/ads/ADSPlcDriver.java | 9 +
.../plc4x/java/ads/field/DirectAdsField.java | 2 +-
.../plc4x/java/ads/field/DirectAdsStringField.java | 2 +-
.../plc4x/java/ads/field/SymbolicAdsField.java | 2 +-
.../java/ads/field/SymbolicAdsStringField.java | 2 +-
.../plc4x/java/canopen/CANOpenPlcDriver.java | 9 +
.../apache/plc4x/java/eip/readwrite/EIPDriver.java | 9 +
.../java/firmata/readwrite/FirmataDriver.java | 9 +
.../apache/plc4x/java/knxnetip/KnxNetIpDriver.java | 3 +
.../plc4x/java/knxnetip/ets5/Ets5Parser.java | 10 +-
.../java/knxnetip/ets5/model/GroupAddress.java | 8 +-
.../knxnetip/protocol/KnxNetIpProtocolLogic.java | 9 +-
.../org/apache/plc4x/java/modbus/ModbusDriver.java | 9 +
.../apache/plc4x/java/s7/readwrite/S7Driver.java | 9 +
.../java/s7/readwrite/optimizer/S7Optimizer.java | 4 +-
.../plc4x/java/s7/readwrite/issues/PLC4X272.java | 29 +
.../s7/src/test/resources/tests/PLC4X-272.xml | 2282 +++++++
plc4j/integrations/apache-kafka/pom.xml | 48 +-
.../org/apache/plc4x/kafka/Plc4xSinkConnector.java | 1 -
.../java/org/apache/plc4x/kafka/Plc4xSinkTask.java | 2 -
.../apache/plc4x/kafka/Plc4xSourceConnector.java | 3 -
.../org/apache/plc4x/kafka/Plc4xSourceTask.java | 5 +-
.../apache-kafka/src/remote-resources/LICENSE | 7 +
.../apache-kafka/src/remote-resources/NOTICE | 4 +
plc4j/integrations/opcua-server/pom.xml | 23 +-
.../java/opcuaserver/AttributeLoggingFilter.java | 73 -
.../plc4x/java/opcuaserver/KeyStoreLoader.java | 163 -
.../apache/plc4x/java/opcuaserver/OPCUAServer.java | 244 +-
.../opcuaserver/backend/Plc4xCommunication.java | 238 +-
.../java/opcuaserver/backend/Plc4xNamespace.java | 110 +-
.../opcuaserver/configuration/Configuration.java | 7 -
.../opcuaserver/context/CertificateGenerator.java | 122 +
.../opcuaserver/context/CertificateKeyPair.java | 38 +
.../plc4x/java/opcuaserver/OpcuaPlcDriverTest.java | 245 +
.../opcua-server/src/test/resources/config.yml | 1 -
.../apache/plc4x/java/spi/Plc4xNettyWrapper.java | 1 +
.../spi/connection/DefaultNettyPlcConnection.java | 33 +-
.../java/spi/connection/GeneratedDriverBase.java | 13 +
.../plc4x/test/driver/DriverTestsuiteRunner.java | 3 +
pom.xml | 7 +-
protocols/knxnetip/pom.xml | 7 +
protocols/knxnetip/src/main/xslt/knx-types.xsl | 181 +-
.../enrich/knxnetip/ets5/Ets5DataEnrichment.java | 8 +-
513 files changed, 27686 insertions(+), 15200 deletions(-)
diff --cc plc4j/integrations/opcua-server/pom.xml
index f920410,3313a16..21fcc24
--- a/plc4j/integrations/opcua-server/pom.xml
+++ b/plc4j/integrations/opcua-server/pom.xml
@@@ -208,8 -203,20 +203,25 @@@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>
++<<<<<<< HEAD
+
+
++=======
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>io.vavr</groupId>
+ <artifactId>vavr</artifactId>
+ </dependency>
++>>>>>>> develop
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
</dependencies>
diff --cc plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
index 1fc70ad,177ef71..2343d11
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
@@@ -47,8 -48,9 +48,13 @@@ public class DefaultNettyPlcConnection
protected final Configuration configuration;
protected final ChannelFactory channelFactory;
protected final boolean awaitSessionSetupComplete;
+ protected final boolean awaitSessionDisconnectComplete;
protected final ProtocolStackConfigurer stackConfigurer;
++<<<<<<< HEAD
+ private final CompletableFuture<Void> sessionDisconnectCompleteFuture = new CompletableFuture<>();
++=======
+ protected final CompletableFuture<Void> sessionDisconnectCompleteFuture = new CompletableFuture<>();
++>>>>>>> develop
protected Channel channel;
protected boolean connected;
@@@ -107,15 -111,23 +115,33 @@@
}
}
+ /**
+ * Close the connection by firstly calling disconnect and waiting for a DisconnectedEvent occurs and then calling
+ * Close() to finish up any other clean up.
+ * @throws PlcConnectionException
+ */
@Override
public void close() throws PlcConnectionException {
++<<<<<<< HEAD
+ // TODO call protocols close method
+
+ channel.pipeline().fireUserEventTriggered(new DisconnectEvent());
+ try {
+ sessionDisconnectCompleteFuture.get(10000L, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ //Do Nothing
++=======
+
+ logger.debug("Closing connection to PLC, await for disconnect = {}", awaitSessionDisconnectComplete);
+
+ channel.pipeline().fireUserEventTriggered(new DisconnectEvent());
+ try {
+ if (awaitSessionDisconnectComplete) {
+ sessionDisconnectCompleteFuture.get(DEFAULT_DISCONNECT_WAIT_TIME, TimeUnit.MILLISECONDS);
+ }
+ } catch (Exception e) {
+ logger.error("Timeout while trying to close connection");
++>>>>>>> develop
}
channel.pipeline().fireUserEventTriggered(new CloseConnectionEvent());
diff --cc protocols/knxnetip/src/main/xslt/knx-types.xsl
index 3ae4e56,65a43f4..6590625
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@@ -46,15 -47,58 +47,68 @@@
// specific language governing permissions and limitations
// under the License.
//
+ [enum uint 16 'KnxDatapointType' [uint 16 'number', uint 8 'sizeInBits', string 'name']
+ ['0' DPT_UNKNOWN ['0', '0', '"Unknown Datapoint Type"']]
+ <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType"/>
+ ]
+
+ [enum uint 32 'KnxDatapointSubtype' [uint 16 'number', KnxDatapointType 'datapointType', string 'name']
+ ['0' DPST_UNKNOWN ['0', 'KnxDatapointType.DPT_UNKNOWN', '"Unknown Datapoint Subtype"']]
+ <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:DatapointTypes/knx:DatapointType/knx:DatapointSubtypes/knx:DatapointSubtype"/>
+ ]
+ [enum uint 16 'KnxInterfaceObjectType' [string 'code', string 'name']
+ ['0' OT_UNKNOWN ['U', '"Unknown Interface Object Type"']]
+ ['1' OT_GENERAL ['G', '"General Interface Object Type"']]
+ <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectTypes/knx:InterfaceObjectType"/>
+ ]
+
++<<<<<<< HEAD
+[enum uint 8 'KnxObjectType' [string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectTypes/knx:InterfaceObjectType"/>
+]
+
+[enum uint 8 'KnxObjectProperties' [string '-1' 'name', string '-1' 'dataTypeId', string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
+]
+
+[enum uint 16 'KnxManufacturers' [string '-1' 'text']<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
++=======
+ [enum uint 32 'KnxInterfaceObjectProperty' [uint 8 'propertyId', KnxInterfaceObjectType 'objectType', KnxPropertyDataType 'propertyDataType', string 'name']
+ ['0' PID_UNKNOWN ['0', 'KnxInterfaceObjectType.OT_UNKNOWN', 'KnxPropertyDataType.PDT_UNKNOWN', '"Unknown Interface Object Property"']]
+ <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
]
+
+ [enum uint 8 'KnxPropertyDataType' [uint 8 'number', uint 8 'sizeInBytes', string 'name']
+ ['0' PDT_UNKNOWN ['0', '0', '"Unknown Property Data Type"']]
+ <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:PropertyDataTypes/knx:PropertyDataType"/>
+ ]
+
+ [enum uint 16 'KnxManufacturer' [uint 16 'number', string 'name']
+ ['0' M_UNKNOWN ['0', '"Unknown Manufacturer"']]
+ <xsl:apply-templates select="knx:KNX/knx:MasterData/knx:Manufacturers/knx:Manufacturer"/>
++>>>>>>> develop
+ ]
+ </xsl:template>
+
+ <xsl:template match="knx:DatapointType">
+ <xsl:variable name="datapointTypeId">
+ <xsl:call-template name="getDatapointTypeId">
+ <xsl:with-param name="contextNode" select="."/>
+ </xsl:call-template>
+ </xsl:variable>['<xsl:value-of select="position()"/>' <xsl:value-of select="$datapointTypeId"/> ['<xsl:value-of select="@Number"/>', '<xsl:value-of select="@SizeInBit"/>', '"<xsl:value-of select="@Text"/>"']]
+ </xsl:template>
+
+ <xsl:template match="knx:DatapointSubtype">
+ <xsl:variable name="datapointSubtypeId">
+ <xsl:choose>
+ <xsl:when test="fn:starts-with(@Name, 'DPT')">DPST_<xsl:value-of select="fn:substring-after(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(@Name, '\[', '_'), '\]', ''), '³', '_3'), 'µ', 'y'), '/', ''), '-', '_'), 'DPT_')"/></xsl:when>
+ <xsl:otherwise>DPST_<xsl:for-each select="tokenize(@Name, ' ')"><xsl:value-of select="concat(upper-case(substring(.,1,1)), substring(., 2))"/><xsl:if test="position()!=last()">_</xsl:if></xsl:for-each></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="datapointTypeId">
+ <xsl:call-template name="getDatapointTypeId">
+ <xsl:with-param name="contextNode" select="../.."/>
+ </xsl:call-template>
+ </xsl:variable>['<xsl:value-of select="position()"/>' <xsl:value-of select="$datapointSubtypeId"/> ['<xsl:value-of select="@Number"/>', 'KnxDatapointType.<xsl:value-of select="$datapointTypeId"/>', '"<xsl:value-of select="@Text"/>"']]
</xsl:template>
<xsl:template match="knx:InterfaceObjectType">
@@@ -140,4 -178,11 +188,15 @@@
</xsl:choose>
</xsl:template>
++<<<<<<< HEAD
++</xsl:stylesheet>
++=======
+ <xsl:template name="getIdFromText">
+ <xsl:param name="text"/>
+ <xsl:variable name="cleanedText" select="fn:replace(fn:replace(fn:replace(fn:replace(fn:upper-case($text), '/', ''), '\(', ''), '\)', ''), '–', '_')"/>
+ <xsl:variable name="cleanedText2" select="fn:replace(fn:replace($cleanedText, '³', '_3'), 'É', 'E')"/>
+ <xsl:value-of select="fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(fn:replace(normalize-space($cleanedText2),' ', '_'), '&', 'AND'), '-', '_'), ' ', '_'), '\.', '_'), ',', '_'), '\+', 'Plus'), '/', '_'), 'Ä', 'AE'), 'Ö', 'OE'), 'Ü', 'UE'), 'ß', 'SS'), ':', '_')"/>
+ </xsl:template>
+
-</xsl:stylesheet>
+</xsl:stylesheet>
++>>>>>>> develop