CatalogItems sind die Inhalte eines Katalogs und bilden die Grundlage für die Counting- und StoringStocks.
Ein CatalogItem ist Instanz einer Unterklasse von CatalogItemImpl
. Im Konstruktor muss ein Name übergeben werden, optional auch ein Zahlenwert vom Typ IntegerValue
. Der Name fungiert als Schlüssel, jedes CatalogItem braucht also einen eindeutigen Bezeichner.
CatalogItems müssen explizit einem Katalog zugewiesen werden. Dafür hat jeder Katalog die Methode add(CatalogItem, DataBasket)
. Das Entfernen von Items aus einem Katalog geschieht analog mit remove(CatalogItem, DataBasket)
oder remove(String, DataBasket)
. Die Methode muss in dabei in einem try catch
Block stehen. Das entfernte Item ist zugleich Rückgabewert.
Die Items können einen ganz unterschiedlichen Aufbau haben, man muss sich nicht auf einen speziellen Typ von Einträgen festlegen. (vergleiche auch Type1Item
und Type2Item
im Beispiel).
Auch Kataloge selbst können als CatalogItems in einem übergeordneten Katalog enthalten sein. Allerdings wird beim Versuch, Items zu diesen Unterkatalogen hinzuzufügen oder aus ihnen zu entfernen, eine NotEditableException
geworfen. Abhilfe bietet das Überschreiben der Methode isEditable()
eines jeden Unterkataloges, so dass stets true
zurückgeliefert wird.
import sale.Shop; public class MainClass { public static void main(String[] args) { SalesPointApplication spa = new SalesPointApplication(); Shop.setTheShop(spa); spa.start(); testData(); } private static void testData() { ApplicationCatalog c = SalesPointApplication.getApplicationCatalog(); SubCatalog sc = SalesPointApplication.getSubCatalog(); c.add(sc); //ohne die überschriebene isEditable()-Methode würde hier eine notEditableException geworfen sc.add(new Type1Item("Typ1", 100)); System.out.println("Inhalt von ApplicationCatalog c: " + c.keySet(null)); System.out.println("Inhalt von SubCatalog sc: " + sc.keySet(null)); } } |
import sale.Shop; public class SalesPointApplication extends Shop { private static final String KAT_KATALOGNAME = "Hauptkatalog"; private static final String KAT_UNTERKATALOGNAME = "Unterkatalog"; public SalesPointApplication() { super(); addCatalog(new ApplicationCatalog(KAT_KATALOGNAME)); addCatalog(new SubCatalog(KAT_UNTERKATALOGNAME)); } public void quit() { if (shutdown(false)) { System.exit(0); } } public static ApplicationCatalog getApplicationCatalog() { return (ApplicationCatalog)getTheShop().getCatalog(KAT_KATALOGNAME); } public static SubCatalog getSubCatalog() { return (SubCatalog)getTheShop().getCatalog(KAT_UNTERKATALOGNAME); } } |
import data.ooimpl.CatalogImpl; import data.CatalogItem; public class SubCatalog extends CatalogImpl { public SubCatalog(String name) { super(name); } public void add(CatalogItem item) { add(item, null); } public boolean isEditable() { return true; } } |