@startuml skinparam classAttributeIconSize 0 ' Component: Adapter Command Service package ru.smarthouse.heating.cloud <<Folder>> { class CloudProviderConfig { + cloudProviderRegistry(): } class CloudProviderRegistry { - adapters: Map<String, CloudProviderAdapter> + registerAdapter(provider: String, adapter: CloudProviderAdapter) + getAdapter(deviceId: String): CloudProviderAdapter } package ru.smarthouse.heating.cloud.adapter <<Folder>> { interface CloudProviderAdapter { + executeCommand(command: DeviceCommand): CommandResult + translateCommand(command: DeviceCommand): CloudCommand + parseResult(cloudResponse: String): CommandResult } class XiaomiCloudAdapter { - xiaomiCloudClient: XiaomiCloudClient - xiaomiCloudMapper: XiaomiCloudMapper + executeCommand(command: DeviceCommand): CommandResult + translateCommand(command: DeviceCommand): CloudCommand + parseResult(cloudResponse: String): CommandResult } class TuyaCloudAdapter { - tuyaCloudClient: TuyaCloudClient - tuyaCloudMapper: TuyaCloudMapper + executeCommand(command: DeviceCommand): CommandResult + translateCommand(command: DeviceCommand): CloudCommand + parseResult(cloudResponse: String): CommandResult } } package ru.smarthouse.heating.cloud.mapper <<Folder>> { interface CloudCommandMapper { + toProviderCommand(deviceCommand: DeviceCommand): String + fromProviderCommand(cloudResponse: String): CommandResult } class XiaomiCloudMapper { + toProviderCommand(deviceCommand: DeviceCommand): String + fromProviderCommand(cloudResponse: String): CommandResult } class TuyaCloudMapper { + toProviderCommand(deviceCommand: DeviceCommand): String + fromProviderCommand(cloudResponse: String): CommandResult } } package ru.smarthouse.heating.cloud.model <<Folder>> { class DeviceCommand { - deviceId: String - action: String - parameters: Map<String, Object> - timestamp: Instant + getDeviceId(): String + getAction(): String + getParameters(): Map<String, Object> } class CloudCommand { - provider: String - protocol: ProtocolType - payload: String - targetUrl: String - headers: Map<String, String> + execute(): CommandResult } class CommandResult { - success: boolean - message: String - timestamp: Instant - requestId: String - cloudResponse: String - executionTime: Duration - deviceStatus: DeviceStatus + isSuccess(): boolean + getMessage(): String + getTimestamp(): Instant + getCloudResponse(): String + getExecutionTime(): Duration + getDeviceStatus(): DeviceStatus } class DeviceStatus { - online: boolean - lastSeen: Instant - batteryLevel: Integer - signalStrength: Integer - errors: List<DeviceError> + isOnline(): boolean + getBatteryLevel(): Integer + getSignalStrength(): Integer + hasErrors(): boolean } class DeviceError { - code: String - description: String - severity: ErrorSeverity - timestamp: Instant + getCode(): String + getDescription(): String + getSeverity(): ErrorSeverity } } } CloudProviderConfig --> CloudProviderRegistry : creates CloudProviderRegistry --> CloudProviderAdapter : manages CloudProviderAdapter <|.. XiaomiCloudAdapter : implements CloudProviderAdapter <|.. TuyaCloudAdapter : implements XiaomiCloudAdapter --> XiaomiCloudMapper : uses TuyaCloudAdapter --> TuyaCloudMapper : uses CloudCommandMapper <|.. XiaomiCloudMapper : implements CloudCommandMapper <|.. TuyaCloudMapper : implements XiaomiCloudAdapter --> DeviceCommand : processes XiaomiCloudAdapter --> CloudCommand : creates XiaomiCloudAdapter --> CommandResult : returns TuyaCloudAdapter --> DeviceCommand : processes TuyaCloudAdapter --> CloudCommand : creates TuyaCloudAdapter --> CommandResult : returns CommandResult --> DeviceStatus : contains DeviceStatus --> DeviceError : contains @enduml
Decode URL
Submit
amiga
aws-orange
black-knight
bluegray
blueprint
cerulean-outline
cerulean
crt-amber
crt-green
cyborg-outline
cyborg
hacker
lightgray
mars
materia-outline
materia
metal
mimeograph
minty
plain
reddress-darkblue
reddress-darkgreen
reddress-darkorange
reddress-darkred
reddress-lightblue
reddress-lightgreen
reddress-lightorange
reddress-lightred
sandstone
silver
sketchy-outline
sketchy
spacelab
spacelab-white
superhero-outline
superhero
toy
united
vibrant
🎉 Discover the future PlantUML Web Editor! 🚀
PNG
SVG
ASCII Art