From 5aed37f8e1a21fcea34fd17f2f547479da359d0a Mon Sep 17 00:00:00 2001
From: Roland Haeder <roland@mxchange.org>
Date: Fri, 11 Sep 2015 11:53:09 +0200
Subject: [PATCH] =?utf8?q?Added=20equals()=20and=20hashCode()=20for=20easy?=
 =?utf8?q?=20item=20comparison.=20Signed-off-by:Roland=20H=C3=A4der=20<rol?=
 =?utf8?q?and@mxchange.org>?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 .../jshopcore/model/basket/BaseBasket.java    |  7 +++--
 .../jshopcore/model/item/BaseItem.java        | 27 +++++++++++++++++++
 2 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/src/org/mxchange/jshopcore/model/basket/BaseBasket.java b/src/org/mxchange/jshopcore/model/basket/BaseBasket.java
index 2a4de12..aac4020 100644
--- a/src/org/mxchange/jshopcore/model/basket/BaseBasket.java
+++ b/src/org/mxchange/jshopcore/model/basket/BaseBasket.java
@@ -20,7 +20,6 @@ import java.util.Deque;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
-import java.util.Objects;
 import org.mxchange.jshopcore.exceptions.BasketItemAlreadyAddedException;
 
 /**
@@ -121,11 +120,11 @@ public abstract class BaseBasket<T extends AddableBasketItem> implements Basket<
 		boolean isAdded = false;
 
 		for (Map.Entry<Long, T> entrySet : map.entrySet()) {
-			// Get item id
-			Long itemId = entrySet.getKey();
+			// Get whole item
+			T i = entrySet.getValue();
 
 			// Compare id
-			if (Objects.equals(itemId, item.getItemId())) {
+			if (i.equals(item)) {
 				// Okay, found it
 				isAdded = true;
 				break;
diff --git a/src/org/mxchange/jshopcore/model/item/BaseItem.java b/src/org/mxchange/jshopcore/model/item/BaseItem.java
index 7a8d50c..2015d2d 100644
--- a/src/org/mxchange/jshopcore/model/item/BaseItem.java
+++ b/src/org/mxchange/jshopcore/model/item/BaseItem.java
@@ -127,4 +127,31 @@ public abstract class BaseItem implements AddableBasketItem, Comparable<AddableB
 	public void setProduct (final Product product) {
 		this.product = product;
 	}
+
+	@Override
+	public boolean equals (final Object object) {
+		// Is it same type?
+		if (!(object instanceof BaseItem)) {
+			// Not equal types
+			return false;
+		} else if (!(object instanceof AddableBasketItem)) {
+			// Not correct interface
+			return false;
+		}
+
+		// Securely cast to wanted interface
+		AddableBasketItem item = (AddableBasketItem) object;
+
+		// Item id and type must be the same
+		return ((Objects.equals(item.getItemId(), this.getItemId()))
+				&& (Objects.equals(item.getItemType(), this.getItemType())));
+	}
+
+	@Override
+	public int hashCode () {
+		int hash = 5;
+		hash = 29 * hash + Objects.hashCode(this.getItemId());
+		hash = 29 * hash + Objects.hashCode(this.getItemType());
+		return hash;
+	}
 }
-- 
2.39.5