@startuml class UsageDetailPublisherFunction [[java:com.iluwatar.producer.calldetails.functions]] { -messageHandlerUtility: MessageHandlerUtility -eventHandlerUtility: EventHandlerUtility +run(): HttpResponseMessage } class UsageCostProcessorFunction [[java:com.iluwatar.consumer.callcostprocessor.functions]] { -messageHandlerUtilityForUsageDetail: MessageHandlerUtility -messageHandlerUtilityForUsageCostDetail: MessageHandlerUtility +run(): HttpResponseMessage } class "MessageHandlerUtility" as MessageHandlerUtility_T [[java:com.iluwatar.claimcheckpattern.utility]] { +readFromPersistantStorage(messageReference: MessageReference, logger: Logger): Message +dropToPersistantStorage(message: Message, logger: Logger): void } class "EventHandlerUtility" as EventHandlerUtility_T [[java:com.callusage.utility.PersistentLocalStorageUtility]] { +publishEvent(customEvent: T, logger: Logger): void } class "Message" as Message_T [[java:com.iluwatar.claimcheckpattern.domain]] { -messageHeader: MessageHeader -messageData: MessageData +Message(messageHeader: MessageHeader, messageData: MessageData) +getMessageData(): MessageData +getMessageHeader(): MessageHeader } class MessageHeader [[java:com.iluwatar.claimcheckpattern.domain]] { -id: String -subject: String -topic: String -eventType: String -eventTime: String -data: Object -dataVersion: String +getId(): String +setId(id: String): void +getSubject(): String +setSubject(subject: String): void +getTopic(): String +setTopic(topic: String): void +getEventType(): String +setEventType(eventType: String): void +getEventTime(): String +setEventTime(eventTime: String): void +getData(): Object +setData(data: Object): void +getDataVersion(): String +setDataVersion(dataVersion:String): void } class "MessageBody" as MessageBody_T [[java:com.iluwatar.claimcheckpattern.domain]] { -data: List[] T +getData(): List[] T +setData(data:List[] T): void } class MessageReference [[java:com.iluwatar.claimcheckpattern.domain]] { -dataLocation: String -dataFileName: String +getDataLocation(): String +setDataLocation(dataLocation:String): void +getDataFileName(): String +setDataFileName(dataFileName:String): void } class UsageDetail [[java:com.iluwatar.claimcheckpattern.domain]] { -userId: String -duration: int -data: int +getUserId(): String +setUserId(userId: String): void +getDuration(): long +setDuration(duration: long): void +getData(): long +setData(data: long): void } class UsageCostDetail [[java:com.iluwatar.claimcheckpattern.domain]] { -userId: String -callCost: double -dataCost: double +getUserId(): String +setUserId(userId: String): void +getCallCost(): double +setCallCost(callCost:double): void +getDataCost(): double +setDataCost(dataCost:double) : void } Message_T "1" *-- "1" MessageHeader : has Message_T "1" *-- "1" MessageBody_T : has MessageHeader "1" *-- "1" MessageReference : has as data object MessageBody_T "1" *-- "1" UsageDetail: has MessageBody_T "1" *-- "1" UsageCostDetail: has EventHandlerUtility_T "1" *-- "1" MessageHeader: has MessageHandlerUtility_T "1" *-- "1" Message_T: has UsageDetailPublisherFunction "1" *-- "1" MessageHandlerUtility_T : has UsageDetailPublisherFunction "1" *-- "1" EventHandlerUtility_T : has UsageCostProcessorFunction "1" *-- "1" MessageHandlerUtility_T : has UsageCostProcessorFunction "1" *-- "1" MessageHandlerUtility_T : has @enduml