X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Forg%2Fmxchange%2Fjshopcore%2Fmodel%2Fbasket%2FBaseBasket.java;h=3e7f2781b8c9f93383fcbd35812cc76b47d094bf;hb=e7033016cdc804552134aa7b50519f3070649ffc;hp=54ac27660a0e4b13d05c82669272742b92709a34;hpb=8c769586f2e78ce355d68e0d21bf123ed362457c;p=jshop-core.git
diff --git a/src/org/mxchange/jshopcore/model/basket/BaseBasket.java b/src/org/mxchange/jshopcore/model/basket/BaseBasket.java
index 54ac276..3e7f278 100644
--- a/src/org/mxchange/jshopcore/model/basket/BaseBasket.java
+++ b/src/org/mxchange/jshopcore/model/basket/BaseBasket.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 Roland Haeder
+ * Copyright (C) 2016 Roland Häder
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,75 +16,84 @@
*/
package org.mxchange.jshopcore.model.basket;
-import java.util.Map;
+import java.util.Deque;
+import java.util.LinkedList;
+import java.util.List;
+import org.mxchange.jshopcore.exceptions.BasketItemAlreadyAddedException;
/**
* 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 Häder
* @param Any instance that implements AddableBasketItem
*/
public abstract class BaseBasket implements Basket {
+
/**
* Serial number
*/
private static final long serialVersionUID = 782_396_762_230_845_717L;
+ /**
+ * Ordered item list
+ */
+ private final Deque deque;
+
/**
* Protected constructor with session instance
*/
protected BaseBasket () {
+ // Init queue
+ this.deque = new LinkedList<>();
}
@Override
- public void init () {
- }
-
- @Override
- public void addItem (final T item) {
+ 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());
+ // 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.");
+ public void clear () {
+ // Deligate to deque
+ this.deque.clear();
}
@Override
- public Map getAll () {
+ public List getAll () {
// Init map
- // TODO: Map map = ((BasketFrontend) this.getFrontend()).getAll();
- Map map = null;
+ 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 T getLast () {
- // Deligate to frontend
- // TODO: return ((BasketFrontend) this.getFrontend()).getLast();
- throw new UnsupportedOperationException("Not yet implmeneted.");
- }
-
- @Override
- public int getLastNumRows () {
- // Deligate to frontend
- // TODO: return this.getFrontend().getLastNumRows();
- throw new UnsupportedOperationException("Not yet implmeneted.");
+ // Deligate to list
+ return this.deque.getLast();
}
@Override
@@ -95,11 +104,38 @@ public abstract class BaseBasket implements Basket<
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();
+ // 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;
}
+
+ @Override
+ public boolean isEmpty () {
+ // Deligate call to frontend
+ return this.deque.isEmpty();
+ }
+
+ @Override
+ public int size () {
+ // Is the list empty?
+ assert this.isEmpty() : "deque is empty"; //NOI18N
+
+ // It is size-1
+ return this.deque.size();
+ }
+
}