@startuml abstract class AbstractMVDataReader { #String dataSourceName +void remove() +String getDataSourceName() } interface MVDataReader { String getDataSourceName() } interface "Iterator" as Iterator_MVDataEntry_ { } interface "Iterable" as Iterable_MVDataEntry_ { } class MVDataEntry { -String key -HashMultimap attrValPairs +MVDataEntry(String key) +Set getValues(String attr) +Set getChangedAttributes(MVDataEntry original) +void mergeValues(boolean appendMode, MVDataEntry[] entries) } interface "Comparable" as Comparable_MVDataEntry_ { } Comparable_MVDataEntry_ <|.. MVDataEntry Iterable_MVDataEntry_ <|.. MVDataReader Iterable_MVDataEntry_ .up.> MVDataEntry Iterator_MVDataEntry_ <|.. MVDataReader MVDataReader <|.. AbstractMVDataReader @enduml