@startuml
abstract class AbstractMVDataReader {
	#String dataSourceName
	+void remove()
	+String getDataSourceName()
}

interface MVDataReader {
	String getDataSourceName()
}

interface "Iterator<MVDataEntry>" as Iterator_MVDataEntry_ {
}


interface "Iterable<MVDataEntry>" as Iterable_MVDataEntry_ {
}

class MVDataEntry {
	-String key
	-HashMultimap<String,String> attrValPairs
	+MVDataEntry(String key)
	+Set<String> getValues(String attr)
	+Set<String> getChangedAttributes(MVDataEntry original)
	+void mergeValues(boolean appendMode, MVDataEntry[] entries)
}
interface "Comparable<MVDataEntry>" as Comparable_MVDataEntry_ {
}

Comparable_MVDataEntry_ <|.. MVDataEntry
Iterable_MVDataEntry_ <|.. MVDataReader
Iterable_MVDataEntry_ .up.> MVDataEntry
Iterator_MVDataEntry_ <|.. MVDataReader
MVDataReader <|.. AbstractMVDataReader
@enduml