@startuml
' style tweaks to make the diagram a little more readable
skinparam {
	Style strictuml
	RoundCorner 5
        Database {
		' the default border no longer matches the normal colours (bug?), so fix this
		BorderColor #A80036
	}
	Sequence {
		' make activations yellow too
		LifeLineBackgroundColor #FDFDCD

		' make stereotypes less ugly
		Stereotype {
			Font {
				Size 11
				Style plain
			}
		}
	}
}

actor User as user
participant "Main" as main
participant "MainMenu" as menu <<gui>>
participant "ViewProduct" as ViewProduct <<gui>>
participant "productsList\n:ProductJdbcDAO" as dao <<ProductDAO>>
participant "productsModel\n:SimpleListModel" as model <<helpers>>
participant "categoriesModel\n:SimpleListModel" as categoriesmodel <<helpers>>
database "H2\nDatabase" as db


create dao
main -> dao : <<construct>>


create menu
main -> menu : <<construct(dao)>>

user -> menu++ : clicks 'View Products'

create ViewProduct
menu -> ViewProduct++ : <<construct (dao)>>


create model
ViewProduct -> model : <<construct>>
create categoriesmodel
ViewProduct -> categoriesmodel : <<construct>>


'ViewProduct++
ViewProduct -> dao++ : getProducts()
dao -> db++ : Select * from Product
return ResultSet
return products
ViewProduct -> model++ : updateItems(products)
model--
ViewProduct -> ViewProduct :jList1.setModel(productsModel)
ViewProduct -> dao++ : getCategories()
dao -> db++ : select distinct category from Product
return ResultSet
return categories
ViewProduct -> categoriesmodel++ : updateItems(categories)
categoriesmodel--
ViewProduct -> ViewProduct :filtercombobox.setModel(categoriesModel)
ViewProduct --> menu
ViewProduct--

menu -> ViewProduct++ : setVisible(true)

user -> ViewProduct++ : Enter productID into input components
ViewProduct--
 
user -> ViewProduct++ : clicks 'Search'
ViewProduct -> ViewProduct : id = txtID.getText()
ViewProduct -> dao++ : searchByID(id)
dao -> db++ : select * from Product where productID = (...)
return ResultSet
return product
ViewProduct -> model++ : updateItems(product)
model--
ViewProduct--
@enduml

