@startuml skinparam linetype ortho skinparam groupInheritance 2 package Spring { interface Model class Sort } package Salespoint { 'https://st.inf.tu-dresden.de/SalesPoint/api//org/salespointframework/catalog/Catalog.html' interface Catalog << T > Product >> { findByAnyCategory(categories : String) : Streamable findByAllCategories(categories : String) : Streamable } interface DataInitializer interface Inventory << T > InventoryItem >> class Product { - name : String + Product(name : String, price : javax.money.MonetaryAmount, [Metric : metric]) + getID() : Product.Identifier + getCategories() : Streamable '+ addCategory(category : String) : boolean '+ removeCategory(category : String) : boolean + getName() : String + getPrice() : @NonNull javax.money.MonetaryAmount '+ setPrice() : @NonNull javax.money.MonetaryAmount '+ supports(quantity : Quantity) : boolean } ' class Quantity { ' + getAmount() : @NotNull BigDecimal ' } } package catering.catalog { interface RentableCatalog { + DEFAULT_SORT : Sort } interface ConsumableCatalog { + DEFAULT_SORT : Sort } RentableCatalog --o CatalogController : "-rentableCatalog" RentableCatalog ..> Catalog : " Rentable" ConsumableCatalog --o CatalogController : "-consumableCatalog" ConsumableCatalog ..> Catalog : " Catalog" class CatalogController { + CatalogController() + CatalogByEventategory(model : Model, form : Form) : String } CatalogController --> Inventory : "- inventory" CatalogController ..> Model : "use" CatalogController .> CatalogForm : "use" class CatalogForm { - query + getQuery() : String } class Consumable { '- wholesalePrice : javax.money.MonetaryAmount - retailPrice : javax.money.MonetaryAmount - promotionPrice : javax.money.MonetaryAmount + Consumable(name : String, price : javax.money.MonetaryAmount) : Consumable + getPrice() : javax.money.MonetaryAmount + setPrice() : javax.money.MonetaryAmount '+ setWholeSalePrice(price : javax.money.MonetaryAmount) + setRetailPrice(price : javax.money.MonetaryAmount) + setPromotionPrice(price : javax.money.MonetaryAmount) } Consumable --|> Product class Rentable { - pricePerHour : javax.money.MonetaryAmount + Rentable(name : String, pricePerHour : javax.money.MonetaryAmount) : Rentable + getPrice() : javax.money.MonetaryAmount 'return pricePerHour' + setPrice(price : javax.money.MonetaryAmount) } Rentable --|> Product class CatalogDataInitalizer { - rentableCatalog : RentableCatalog - consumableCatalog : ConsumableCatalog + initalize() } CatalogDataInitalizer ..|> DataInitializer } '#TODO: to determine which Products of a Category to offer I need to retrieve information about availability of e.g. Cooks and ServicePersonel from the Users or Rentables from the Inventory' @enduml