@startuml
skinparam monochrome false
skinparam backgroundColor MintCream

hide empty members

note as N1
<size:10> Translator keeps Datasets in the map
<size:10> <b><color:SlateGray >key=word,val=Dataset </color>
<size:10> When Translator's method is being called from Dataset
<size:10> it should be called like this <u> translator.getPage(this, int indexp) </u>
<size:10> So that Translator is able to perform getPage
<size:10> for a particular Dataset object </size>
end note

package org.gmol.TranslatingSysTray.translator {
    
    interface ITranslator {
        +IDataset translate(String word) throws TranslatorEx
    }
    class Translator implements ITranslator {
    
        + Translator(String key)     
        ~ List<Entry> getPage(IDataset ds, int pageIndex)
        ~ String getTranslation(Entry e)
    }
    class DatasetEx {
    }
    class IDataset {
	    + String getWord()
	    
		+ int getPageSize()
   		+ int getTotalPageNumber()
   		+ int getTotalResultNumber()

        + String getFirstTranslation() throws DatasetEx;
   		+ String getNextTranslation() throws DatasetEx;
        + String getPreviousTranslation() throws DatasetEx;
        + String getTranslation(String entryLabel) throws DatasetEx;
        + List<String> getEntryLabels(int pageIndex)
    }
    class Dataset implements IDataset{
        - String word

        - int pageSize
        - int totalResultNumber
        - int totalPageNumber
        
        - int currentEntryIndex
        - List<Entry> entries
        ~ // can only be created by Translator\nDataset(Translator translator, String word, int pageSize, Page page)
        - Dataset()
    }
    class Entry {
        - String translation
        ~ String getTranslation()
    }
    class TranslatorEx {
    }
    class DeJsonizer << (S,Yellow) Static >>{
    }
    class Page {
    }
}
class SkPublishAPI #LightSkyBlue {
}
class Logger << (S,#FF7700) Singleton >> {
}


ITranslator o..> IDataset
'Dataset -up-|> IDataset
'Translator -up-|> ITranslator
'ITranslator . TranslatorEx
TranslatorEx .. ITranslator
Translator "1" *--> "(*)" Dataset : datasets >
N1 .. Dataset
N1 .. Translator
'Dataset .. N1
'Translator .. N1
Translator "1" <-- "1" Dataset : translator <
Translator "1" --> "1" SkPublishAPI : api >
'Translator .. TranslatorEx
Translator --> Logger : LOGGER
Translator .. DeJsonizer
Dataset --> Logger : LOGGER
Dataset "1" *--> "entries.size()" Entry : entries >
'Dataset .. DatasetEx
Dataset .. Page
Page "1" *--> "(*)" Entry : entries
DeJsonizer .. Page
IDataset .. DatasetEx

@enduml
