X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Forg%2Fmxchange%2Fjshopcore%2Fmodel%2Fbasket%2FBaseBasket.java;h=bf476b98744f2d6defe599ac87e3d0b45d83b8d7;hb=3e57a777c9cf022fd48396363138da1aaeaf43f5;hp=1110c43c9f53057fe9b1b9e4c97d683f5470dfb5;hpb=825dad8dce51f55184373feda45a6b64896390cd;p=jcustomer-core.git diff --git a/src/org/mxchange/jshopcore/model/basket/BaseBasket.java b/src/org/mxchange/jshopcore/model/basket/BaseBasket.java index 1110c43..bf476b9 100644 --- a/src/org/mxchange/jshopcore/model/basket/BaseBasket.java +++ b/src/org/mxchange/jshopcore/model/basket/BaseBasket.java @@ -16,16 +16,16 @@ */ package org.mxchange.jshopcore.model.basket; -import java.text.MessageFormat; -import java.util.Map; -import javax.ejb.EJB; -import org.mxchange.jcoreeelogger.beans.local.logger.Log; -import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal; +import java.util.Deque; +import java.util.LinkedList; +import java.util.List; +import org.mxchange.jshopcore.exceptions.BasketItemAlreadyAddedException; /** - * A general basket class + * A general basket class. This class does not store any properties, it only + * contains logic for handling the items (T). * - * @author Roland Haeder + * @author Roland Haeder * @param Any instance that implements AddableBasketItem */ public abstract class BaseBasket implements Basket { @@ -35,114 +35,105 @@ public abstract class BaseBasket implements Basket< private static final long serialVersionUID = 782_396_762_230_845_717L; /** - * Logger instance + * Ordered item list */ - @EJB - @Log - private LoggerBeanLocal logger; + private final Deque deque; /** * Protected constructor with session instance */ protected BaseBasket () { - // Trace message - this.getLogger().logTrace("CALLED!"); //NOI18N + // Init queue + this.deque = new LinkedList<>(); } @Override - public void init () { - // Trace message - this.getLogger().logTrace("CALLED!"); //NOI18N - } - - @Override - @SuppressWarnings ("unchecked") - public void addItem (final T item) { - // Trace call - this.getLogger().logTrace(MessageFormat.format("item={0} - CALLED!", item)); //NOI18N - + public void addItem (final T item) throws BasketItemAlreadyAddedException { // item must not be null if (null == item) { // Then abort here throw new NullPointerException("item is null"); //NOI18N } else if (this.isAdded(item)) { // Already been added - throw new IllegalArgumentException("item has already been added. Did you miss to call isAdded()?"); //NOI18N + throw new BasketItemAlreadyAddedException(item); //NOI18N } - // Add item to database - // TODO: ((BasketFrontend) this.getFrontend()).addItem(item, this.getSessionId()); - - // Trace call - this.getLogger().logTrace("EXIT!"); //NOI18N + // Add it here + this.deque.add(item); } @Override public boolean isEmpty () { // Deligate call to frontend - // TODO: return ((BasketFrontend) this.getFrontend()).isEmpty(); - throw new UnsupportedOperationException("Not yet implmeneted."); + return this.deque.isEmpty(); } @Override - @SuppressWarnings("unchecked") - public Map getAll () { - // Trace message - this.getLogger().logTrace("CALLED!"); //NOI18N - + public List getAll () { // Init map - // TODO: Map map = ((BasketFrontend) this.getFrontend()).getAll(); - Map map = null; - - // Trace message - this.getLogger().logTrace("map=" + map); //NOI18N + List list = new LinkedList<>(); + + // Iterate over full item list + for (final T item : this.deque) { + // item should not be null + if (null == item) { + // Abort here + throw new NullPointerException("item is null"); //NOI18N + } + + // Add to map, use the item's id as key + list.add(item); + } // Return it - return map; + return list; } @Override - public AddableBasketItem getLast () { - // Deligate to frontend - // TODO: return ((BasketFrontend) this.getFrontend()).getLast(); - throw new UnsupportedOperationException("Not yet implmeneted."); + public T getLast () { + // Deligate to list + return this.deque.getLast(); } @Override public int getLastNumRows () { - // Deligate to frontend - // TODO: return this.getFrontend().getLastNumRows(); - throw new UnsupportedOperationException("Not yet implmeneted."); + // Is the list empty? + assert this.isEmpty() : "deque is empty"; //NOI18N + + // It is size-1 + return (this.deque.size() - 1); } @Override public boolean isAdded (final T item) { - // Trace call - this.getLogger().logTrace(MessageFormat.format("item={0} - CALLED!", item)); //NOI18N - // item must not be null if (null == item) { // Then abort here throw new NullPointerException("item is null"); //NOI18N } - // Call map's method - // TODO: boolean isAdded = ((BasketFrontend) this.getFrontend()).isAdded(item, this.getSessionId()); - boolean isAdded = true; + // Get all items + List list = this.getAll(); - // Trace message - this.getLogger().logTrace(MessageFormat.format("isAdded={0} - EXIT!", isAdded)); //NOI18N + // Default is not found + boolean isAdded = false; + // Loop through list + for (final T i : list) { + // Compare id + if (i.equals(item)) { + // Okay, found it + isAdded = true; + break; + } + } // Return it return isAdded; } - /** - * Getter for logger - * - * @return Logger instance - */ - private LoggerBeanLocal getLogger () { - return this.logger; + @Override + public void clear () { + // Deligate to deque + this.deque.clear(); } }