Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added src/class-diagram-core.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
122 changes: 122 additions & 0 deletions src/domain-model.md

Large diffs are not rendered by default.

79 changes: 79 additions & 0 deletions src/main/java/com/booleanuk/core/Bagel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.booleanuk.core;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class Bagel implements Item{
private List<Filling> fillings = new ArrayList<>();
private String variant;
private String name;
private String sku;
private float price;

public Bagel(String variant) {
this.variant = variant.toUpperCase();
this.name = "Bagel";
this.price = 0.49F;
setRest();
}

private void setRest(){
switch (this.variant) {
case "ONION" -> this.sku = "BGLO";
case "PLAIN" -> {
this.price = 0.39F;
this.sku = "BGLP";
}
case "EVERYTHING" -> this.sku = "BGLE";
case "SESAME" -> this.sku = "BGLS";
}
}

@Override
public String getVariant() {
return this.variant;
}

@Override
public float getPrice(){
float totalPrice = this.price;

if (!fillings.isEmpty()){
for (Filling filling : fillings) {
totalPrice += filling.getPrice();
}
}
return totalPrice;
}

@Override
public String getSku() {
return this.sku;
}

@Override
public String getName() {
return this.name;
}

public void addFilling(String filling){
String addFilling = filling.toUpperCase();
fillings.add(new Filling(addFilling));
}


public List<Filling>getFillings() {
return fillings;
}

public boolean removeFilling(String filling) {
String fillingToRemove = filling.toUpperCase();
for(Filling fillingInList: fillings){
if (fillingInList.getVariant().equals(fillingToRemove)){
fillings.remove(fillingInList);
return true;
}
}return false;
}
}
96 changes: 96 additions & 0 deletions src/main/java/com/booleanuk/core/Basket.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package com.booleanuk.core;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class Basket {
private static int capacity;
private final int DEFAULT_CAPACITY = 5;
private List<Item> items;

public Basket(){
capacity = DEFAULT_CAPACITY;
this.items = new ArrayList<>();
}
public void addBagelToBasket(String variant) {
if (!this.isFull()) {
String item = variant.toUpperCase();
Bagel bagel = new Bagel(item);
items.add(bagel);
}
}

public boolean addItemToBasket(Item variant) {
if (!this.isFull() && !(variant instanceof Filling)){
items.add(variant);
return true;
}return false;
}

public boolean isFull() {
return items.size() >= capacity;
}

public boolean removeItem(String itemToRemove){
if (!items.isEmpty()) {
for (Item item : items){
if (Objects.equals(item.getVariant().toUpperCase(), itemToRemove.toUpperCase())){
items.remove(item);
return true;
}
}
} return false;
}

public boolean setCapacity(int newCapacity, Manager manager){
if (manager == null) {
throw new SecurityException("Only managers can change basket capacity");
}
if (newCapacity >= 0){
capacity = newCapacity;
return true;
} else return false;
}

public float getTotalCost() {
float sum = 0;
for (Item item: items){
sum += item.getPrice();
}
return sum;
}

public boolean addFillingToBagel(String bagel, String filling) {
String bagelToUpper = bagel.toUpperCase();
String fillingToUpper = filling.toUpperCase();
for (Item item : items) {
if (item instanceof Bagel && item.getVariant().toUpperCase().equals(bagelToUpper)) {
((Bagel) item).addFilling(filling);
return true;
}
}

if(isFull()){
System.out.println("Cannot add new bagel. The basket is full.");
return false;
}

Bagel newBagel = new Bagel(bagelToUpper);
newBagel.addFilling(fillingToUpper);
items.add(newBagel);
return true;
}

public List<Item> getItems() {
return items;
}

public int getCurrentCapacity() {
return capacity;
}

public int getNumberOfItems() {
return items.size();
}
}
49 changes: 49 additions & 0 deletions src/main/java/com/booleanuk/core/Coffee.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.booleanuk.core;

public class Coffee implements Item {
private String variant;
private String name;
private String sku;
private float price;

public Coffee(String variant) {
this.variant = variant.toUpperCase();
this.name = "Coffee";
this.price = 1.29F;
setRest();
}

private void setRest(){
switch (this.variant) {
case "BLACK" -> {
this.price = 0.99F;
this.sku = "COFB";
}
case "WHITE" -> {
this.price = 1.19F;
this.sku = "COFW";
} case "CAPUCCINO" -> this.sku = "COFC";
case "LATTE" -> this.sku = "COFL";
}
}

@Override
public String getVariant() {
return this.variant;
}

@Override
public float getPrice() {
return this.price;
}

@Override
public String getSku() {
return this.sku;
}

@Override
public String getName() {
return this.name;
}
}
46 changes: 46 additions & 0 deletions src/main/java/com/booleanuk/core/Customer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.booleanuk.core;

public class Customer extends PublicMember {

public Customer(Basket basket, Inventory inventory) {
super(basket, inventory);
}


public float getTotalCost() {
return basket.getTotalCost();
}

public float getBagelPrice(String variant) {
Item item = inventory.getItem(variant);
if (item != null) {
return item.getPrice();
} return 0;
}

public boolean addFilling(String bagel, String filling) {
if (!inventory.inInventory(bagel)) {
System.out.println("We don't sell this bagel here!");
return false;
}

if (!inventory.inInventory(filling)) {
System.out.println("We don't sell this filling here!");
return false;
}

return basket.addFillingToBagel(bagel, filling);
}


public float getFillingPrice(String variant) {
Item item = inventory.getItem(variant);
if (item != null) {
return item.getPrice();
} return 0;
}

public float getTotalBagelPrice(Bagel bagel) {
return bagel.getPrice();
}
}
46 changes: 46 additions & 0 deletions src/main/java/com/booleanuk/core/Filling.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.booleanuk.core;

public class Filling implements Item {
private String variant;
private String name;
private String sku;
private float price;

public Filling (String variant) {
this.variant = variant.toUpperCase();
this.name = "Filling";
this.price = 0.12F;
setRest();
}

private void setRest(){
switch(this.variant) {
case "BACON" -> this.sku = "FILB";
case "CHEESE" -> this.sku = "FILC";
case "CREAM CHEESE" -> this.sku = "FILX";
case "SMOKED SALMON" -> this.sku = "FILS";
case "HAM" -> this.sku = "FILH";
case "EGG" -> this.sku = "FILE";
}
}

@Override
public String getVariant() {
return this.variant;
}

@Override
public float getPrice() {
return this.price;
}

@Override
public String getSku() {
return this.sku;
}

@Override
public String getName() {
return this.name;
}
}
46 changes: 46 additions & 0 deletions src/main/java/com/booleanuk/core/Inventory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.booleanuk.core;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class Inventory {
private Map<String,Item> inventory = new HashMap<>();

public Inventory(){
setDefaultInventory();
}

public boolean inInventory(String variant) {
String item = variant.toUpperCase();
for (String key : inventory.keySet()) {
if (Objects.equals(key, item)) {
return true;
}
} return false;
}

private void setDefaultInventory(){
inventory.put("ONION", new Bagel("Onion"));
inventory.put("PLAIN", new Bagel("Plain"));
inventory.put("EVERYTHING", new Bagel("Everything"));
inventory.put("SESAME", new Bagel("Sesame"));

inventory.put("BLACK", new Coffee("Black"));
inventory.put("WHITE", new Coffee("White"));
inventory.put("CAPUCCINO", new Coffee("Capuccino"));
inventory.put("LATTE", new Coffee("Latte"));

inventory.put("BACON", new Filling("Bacon"));
inventory.put("EGG", new Filling("Egg"));
inventory.put("CHEESE", new Filling("Cheese"));
inventory.put("CREAM CHEESE", new Filling("Cream Cheese"));
inventory.put("SMOKED SALMON", new Filling("Smoked Salmon"));
inventory.put("HAM", new Filling("Ham"));

}

public Item getItem(String variant){
return inventory.get(variant.toUpperCase());
}
}
9 changes: 9 additions & 0 deletions src/main/java/com/booleanuk/core/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.booleanuk.core;

public interface Item {

String getVariant();
float getPrice();
String getSku();
String getName();
}
13 changes: 13 additions & 0 deletions src/main/java/com/booleanuk/core/Manager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.booleanuk.core;

public class Manager extends PublicMember {

public Manager(Basket basket, Inventory inventory) {
super(basket, inventory);
}

public Boolean changeBasketCapacity(int capacity){
return basket.setCapacity(capacity, this);
}

}
Loading
Loading