package org.sculptor.simplecqrs.query.serviceimpl; import org.sculptor.framework.event.DynamicMethodDispatcher; import org.sculptor.framework.event.Event; import org.sculptor.simplecqrs.command.domain.InventoryItemCreated; import org.sculptor.simplecqrs.command.domain.InventoryItemDeactivated; import org.sculptor.simplecqrs.command.domain.InventoryItemEvent; import org.sculptor.simplecqrs.command.domain.InventoryItemRenamed; import org.sculptor.simplecqrs.query.domain.InventoryItemList; import org.sculptor.simplecqrs.query.exception.InventoryItemListNotFoundException; import org.springframework.stereotype.Service; /** * Implementation of InventoryListView. */ @Service("inventoryListView") public class InventoryListViewImpl extends InventoryListViewImplBase { public InventoryListViewImpl() { } public void receive(Event event) { DynamicMethodDispatcher.dispatch(this, event, "handle"); } public void handle(InventoryItemCreated event) { getInventoryItemListRepository().save(new InventoryItemList(event.getItemId(), event.getName())); } public void handle(InventoryItemRenamed event) { InventoryItemList item = tryGetItem(event.getItemId()); item.setName(event.getNewName()); getInventoryItemListRepository().save(item); } public void handle(InventoryItemDeactivated event) { InventoryItemList item = tryGetItem(event.getItemId()); getInventoryItemListRepository().delete(item); } public void handle(InventoryItemEvent other) { // not interested } private InventoryItemList tryGetItem(String itemId) { try { return getInventoryItemListRepository().findByKey(itemId); } catch (InventoryItemListNotFoundException e) { throw new IllegalStateException("Unknown item: " + itemId); } } }