From 5ce60669164fcd3b7ab4bd8261c921675f3ea7dc Mon Sep 17 00:00:00 2001 From: Axel Hansson Date: Wed, 24 Jan 2024 10:12:42 +0100 Subject: [PATCH 1/2] First exercise complete --- src/main/java/com/booleanuk/core/Article.java | 28 +------ src/main/java/com/booleanuk/core/Book.java | 30 +------ src/main/java/com/booleanuk/core/Item.java | 35 ++++++++ src/main/java/com/booleanuk/core/Library.java | 80 +++---------------- .../java/com/booleanuk/core/Newspaper.java | 15 +--- .../java/com/booleanuk/core/LibraryTest.java | 30 +++++++ 6 files changed, 86 insertions(+), 132 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Item.java create mode 100644 src/test/java/com/booleanuk/core/LibraryTest.java diff --git a/src/main/java/com/booleanuk/core/Article.java b/src/main/java/com/booleanuk/core/Article.java index 1e359b0..ee3278b 100644 --- a/src/main/java/com/booleanuk/core/Article.java +++ b/src/main/java/com/booleanuk/core/Article.java @@ -1,35 +1,11 @@ package com.booleanuk.core; -public class Article { - String title; +public class Article extends Item { boolean onLoan = false; public Article(String title) { - this.title = title; + super(title); } - public boolean isOnLoan() { - return onLoan; - } - - public String checkIn() { - if (!this.isOnLoan()) { - return "item is not currently on loan"; - } - - this.onLoan = false; - - return "item has been checked in"; - } - - public String checkOut() { - if (this.isOnLoan()) { - return "item is currently on loan"; - } - - this.onLoan = true; - - return "item has been checked out"; - } } diff --git a/src/main/java/com/booleanuk/core/Book.java b/src/main/java/com/booleanuk/core/Book.java index 9261f65..cbd755d 100644 --- a/src/main/java/com/booleanuk/core/Book.java +++ b/src/main/java/com/booleanuk/core/Book.java @@ -1,35 +1,9 @@ package com.booleanuk.core; -public class Book { - String title; - - boolean onLoan = false; +public class Book extends Item{ public Book(String title) { - this.title = title; - } - - public boolean isOnLoan() { - return onLoan; - } - - public String checkIn() { - if (!this.isOnLoan()) { - return "item is not currently on loan"; - } - - this.onLoan = false; - - return "item has been checked in"; + super(title); } - public String checkOut() { - if (this.isOnLoan()) { - return "item is currently on loan"; - } - - this.onLoan = true; - - return "item has been checked out"; - } } diff --git a/src/main/java/com/booleanuk/core/Item.java b/src/main/java/com/booleanuk/core/Item.java new file mode 100644 index 0000000..3b0ef8f --- /dev/null +++ b/src/main/java/com/booleanuk/core/Item.java @@ -0,0 +1,35 @@ +package com.booleanuk.core; + +public abstract class Item { + + String title; + boolean onLoan; + public Item(String title) { + this.title = title; + this.onLoan = false; + } + + private boolean isOnLoan() { + return this.onLoan; + } + + public String checkIn() { + if (!this.isOnLoan()) { + return "item is not currently on loan"; + } + + this.onLoan = false; + + return "item has been checked in"; + } + + public String checkOut() { + if (this.isOnLoan()) { + return "item is currently on loan"; + } + + this.onLoan = true; + + return "item has been checked out"; + } +} diff --git a/src/main/java/com/booleanuk/core/Library.java b/src/main/java/com/booleanuk/core/Library.java index f03ecf0..92bf05f 100644 --- a/src/main/java/com/booleanuk/core/Library.java +++ b/src/main/java/com/booleanuk/core/Library.java @@ -1,77 +1,23 @@ package com.booleanuk.core; +import java.util.ArrayList; import java.util.List; public class Library { - List
articles; - List books; - List newspapers; + List items; - public void addToStock(Article item) { - this.articles.add(item); + public Library(){ + this.items = new ArrayList<>(); } - - public void addToStock(Book item) { - this.books.add(item); - } - - public void addToStock(Newspaper item) { - this.newspapers.add(item); + public void addToStock(Item item) { + this.items.add(item); } // The following methods may contain code that you are unfamiliar with. The strange syntax of article -> something // is called a lambda expression (https://www.w3schools.com/java/java_lambda.asp) - public String checkInArticle(String title) { - List
filtered = this.articles.stream() - .filter(article -> article.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkIn(); - } - - public String checkOutArticle(String title) { - List
filtered = this.articles.stream() - .filter(article -> article.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkOut(); - } - - public String checkInBook(String title) { - List filtered = this.books.stream() - .filter(book -> book.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkIn(); - } - - public String checkOutBook(String title) { - List filtered = this.books.stream() - .filter(book -> book.title.equals(title)) - .toList(); - - if (filtered.size() < 1) { - return "item is not part of the library's collection"; - } - - return filtered.get(0).checkOut(); - } - - public String checkInNewspaper(String title) { - List filtered = this.newspapers.stream() - .filter(newspaper -> newspaper.title.equals(title)) + public String checkInItem(String title) { + List filtered = this.items.stream() + .filter(item -> item.title.equals(title)) .toList(); if (filtered.size() < 1) { @@ -81,9 +27,9 @@ public String checkInNewspaper(String title) { return filtered.get(0).checkIn(); } - public String checkOutNewspaper(String title) { - List filtered = this.newspapers.stream() - .filter(newspaper -> newspaper.title.equals(title)) + public String checkOutItem(String title) { + List filtered = this.items.stream() + .filter(item -> item.title.equals(title)) .toList(); if (filtered.size() < 1) { @@ -92,4 +38,4 @@ public String checkOutNewspaper(String title) { return filtered.get(0).checkOut(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Newspaper.java b/src/main/java/com/booleanuk/core/Newspaper.java index 8411d9c..6904aba 100644 --- a/src/main/java/com/booleanuk/core/Newspaper.java +++ b/src/main/java/com/booleanuk/core/Newspaper.java @@ -1,22 +1,15 @@ package com.booleanuk.core; -public class Newspaper { - String title; - - boolean onLoan = false; - +public class Newspaper extends Item { public Newspaper(String title) { - this.title = title; + super(title); } - - public boolean isOnLoan() { - return onLoan; - } - + @Override public String checkIn() { return "newspapers are not available for loan"; } + @Override public String checkOut() { return "newspapers are not available for loan"; } diff --git a/src/test/java/com/booleanuk/core/LibraryTest.java b/src/test/java/com/booleanuk/core/LibraryTest.java new file mode 100644 index 0000000..5a78de9 --- /dev/null +++ b/src/test/java/com/booleanuk/core/LibraryTest.java @@ -0,0 +1,30 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class LibraryTest { + + @Test + public void testAddingCheckInCheckOut(){ + Library library = new Library(); + Book book = new Book("Lord of the flies"); + + //Check in item not in collection + Assertions.assertEquals("item is not part of the library's collection", library.checkInItem("Lord of the flies")); + + //Check out item not in collection + Assertions.assertEquals("item is not part of the library's collection", library.checkInItem("Lord of the flies")); + + library.addToStock(book); + //Check out item in collection + + Assertions.assertEquals("item has been checked out", library.checkOutItem("Lord of the flies")); + + //Check in item in collection + + Assertions.assertEquals("item has been checked in", library.checkInItem("Lord of the flies")); + } +} \ No newline at end of file From c195b5db0083c5a2d3f3c459b0dada7decf41af4 Mon Sep 17 00:00:00 2001 From: Axel Hansson Date: Wed, 24 Jan 2024 10:50:23 +0100 Subject: [PATCH 2/2] Second exercise complete --- src/main/java/com/booleanuk/core/Article.java | 6 ++-- src/main/java/com/booleanuk/core/Author.java | 25 +++++++++++++++ src/main/java/com/booleanuk/core/Book.java | 4 +-- src/main/java/com/booleanuk/core/Item.java | 17 ++++++++-- src/main/java/com/booleanuk/core/Library.java | 16 ++++++++-- .../java/com/booleanuk/core/Newspaper.java | 5 +++ .../java/com/booleanuk/core/ArticleTest.java | 12 ++++--- .../java/com/booleanuk/core/BookTest.java | 12 ++++--- .../java/com/booleanuk/core/LibraryTest.java | 31 ++++++++++++++++++- 9 files changed, 110 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Author.java diff --git a/src/main/java/com/booleanuk/core/Article.java b/src/main/java/com/booleanuk/core/Article.java index ee3278b..d11131a 100644 --- a/src/main/java/com/booleanuk/core/Article.java +++ b/src/main/java/com/booleanuk/core/Article.java @@ -2,10 +2,10 @@ public class Article extends Item { - boolean onLoan = false; + public Article(String title, Author author) { + + super(title, author); - public Article(String title) { - super(title); } } diff --git a/src/main/java/com/booleanuk/core/Author.java b/src/main/java/com/booleanuk/core/Author.java new file mode 100644 index 0000000..a4e54e5 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Author.java @@ -0,0 +1,25 @@ +package com.booleanuk.core; + +public class Author { + private String name; + private String eMail; + private String website; + + public Author(String name, String eMail, String website) { + this.name = name; + this.eMail = eMail; + this.website = website; + } + + public String getName() { + return name; + } + + public String geteMail() { + return eMail; + } + + public String getWebsite() { + return website; + } +} diff --git a/src/main/java/com/booleanuk/core/Book.java b/src/main/java/com/booleanuk/core/Book.java index cbd755d..b2653d9 100644 --- a/src/main/java/com/booleanuk/core/Book.java +++ b/src/main/java/com/booleanuk/core/Book.java @@ -2,8 +2,8 @@ public class Book extends Item{ - public Book(String title) { - super(title); + public Book(String title, Author author) { + super(title, author); } } diff --git a/src/main/java/com/booleanuk/core/Item.java b/src/main/java/com/booleanuk/core/Item.java index 3b0ef8f..3fc3e0a 100644 --- a/src/main/java/com/booleanuk/core/Item.java +++ b/src/main/java/com/booleanuk/core/Item.java @@ -1,18 +1,27 @@ package com.booleanuk.core; public abstract class Item { + private Author author; + private String title; + private boolean onLoan; - String title; - boolean onLoan; public Item(String title) { this.title = title; this.onLoan = false; } + public Item(String title, Author author) { + this(title); + this.author = author; + } + private boolean isOnLoan() { return this.onLoan; } + public String getTitle() { + return title; + } public String checkIn() { if (!this.isOnLoan()) { return "item is not currently on loan"; @@ -32,4 +41,8 @@ public String checkOut() { return "item has been checked out"; } + + public String getAuthorInfo() { + return "Author: " + author.getName() + ", eMail: " + author.geteMail() + " and website: " + author.getWebsite(); + } } diff --git a/src/main/java/com/booleanuk/core/Library.java b/src/main/java/com/booleanuk/core/Library.java index 92bf05f..785baf8 100644 --- a/src/main/java/com/booleanuk/core/Library.java +++ b/src/main/java/com/booleanuk/core/Library.java @@ -17,7 +17,7 @@ public void addToStock(Item item) { // is called a lambda expression (https://www.w3schools.com/java/java_lambda.asp) public String checkInItem(String title) { List filtered = this.items.stream() - .filter(item -> item.title.equals(title)) + .filter(item -> item.getTitle().equals(title)) .toList(); if (filtered.size() < 1) { @@ -29,7 +29,7 @@ public String checkInItem(String title) { public String checkOutItem(String title) { List filtered = this.items.stream() - .filter(item -> item.title.equals(title)) + .filter(item -> item.getTitle().equals(title)) .toList(); if (filtered.size() < 1) { @@ -38,4 +38,16 @@ public String checkOutItem(String title) { return filtered.get(0).checkOut(); } + + public String getInfoAboutAuthor(String title) { + List filtered = this.items.stream() + .filter(item -> item.getTitle().equals(title)) + .toList(); + + if (filtered.size() < 1) { + return "item is not part of the library's collection"; + } + + return filtered.get(0).getAuthorInfo(); + } } \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Newspaper.java b/src/main/java/com/booleanuk/core/Newspaper.java index 6904aba..356c1b1 100644 --- a/src/main/java/com/booleanuk/core/Newspaper.java +++ b/src/main/java/com/booleanuk/core/Newspaper.java @@ -13,4 +13,9 @@ public String checkIn() { public String checkOut() { return "newspapers are not available for loan"; } + + @Override + public String getAuthorInfo() { + return "The newspaper has multiple authors"; + } } diff --git a/src/test/java/com/booleanuk/core/ArticleTest.java b/src/test/java/com/booleanuk/core/ArticleTest.java index 00bbaeb..3b6bd75 100644 --- a/src/test/java/com/booleanuk/core/ArticleTest.java +++ b/src/test/java/com/booleanuk/core/ArticleTest.java @@ -6,13 +6,15 @@ class ArticleTest { @Test public void shouldCheckOutIfAvailable() { - Article article = new Article("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Article article = new Article("JUnit Rocks", JUnitauthor); Assertions.assertEquals("item has been checked out", article.checkOut()); } @Test public void shouldDeclineIfNotAvailableToCheckout() { - Article article = new Article("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Article article = new Article("JUnit Rocks", JUnitauthor); article.checkOut(); Assertions.assertEquals("item is currently on loan", article.checkOut()); @@ -20,7 +22,8 @@ public void shouldDeclineIfNotAvailableToCheckout() { @Test public void shouldCheckInIfOnLoan() { - Article article = new Article("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Article article = new Article("JUnit Rocks", JUnitauthor); article.checkOut(); Assertions.assertEquals("item has been checked in", article.checkIn()); @@ -28,7 +31,8 @@ public void shouldCheckInIfOnLoan() { @Test public void shouldDeclineCheckInIfNotOnLoan() { - Article article = new Article("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Article article = new Article("JUnit Rocks", JUnitauthor); Assertions.assertEquals("item is not currently on loan", article.checkIn()); } diff --git a/src/test/java/com/booleanuk/core/BookTest.java b/src/test/java/com/booleanuk/core/BookTest.java index 180a165..f79519c 100644 --- a/src/test/java/com/booleanuk/core/BookTest.java +++ b/src/test/java/com/booleanuk/core/BookTest.java @@ -6,13 +6,15 @@ public class BookTest { @Test public void shouldCheckOutIfAvailable() { - Book book = new Book("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Book book = new Book("JUnit Rocks", JUnitauthor); Assertions.assertEquals("item has been checked out", book.checkOut()); } @Test public void shouldDeclineIfNotAvailableToCheckout() { - Book book = new Book("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Book book = new Book("JUnit Rocks", JUnitauthor); book.checkOut(); Assertions.assertEquals("item is currently on loan", book.checkOut()); @@ -20,7 +22,8 @@ public void shouldDeclineIfNotAvailableToCheckout() { @Test public void shouldCheckInIfOnLoan() { - Book book = new Book("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Book book = new Book("JUnit Rocks", JUnitauthor); book.checkOut(); Assertions.assertEquals("item has been checked in", book.checkIn()); @@ -28,7 +31,8 @@ public void shouldCheckInIfOnLoan() { @Test public void shouldDeclineCheckInIfNotOnLoan() { - Book book = new Book("JUnit Rocks"); + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Book book = new Book("JUnit Rocks", JUnitauthor); Assertions.assertEquals("item is not currently on loan", book.checkIn()); } diff --git a/src/test/java/com/booleanuk/core/LibraryTest.java b/src/test/java/com/booleanuk/core/LibraryTest.java index 5a78de9..2b298c9 100644 --- a/src/test/java/com/booleanuk/core/LibraryTest.java +++ b/src/test/java/com/booleanuk/core/LibraryTest.java @@ -10,7 +10,8 @@ class LibraryTest { @Test public void testAddingCheckInCheckOut(){ Library library = new Library(); - Book book = new Book("Lord of the flies"); + Author williamGolding = new Author("William Golding", "williegolding@gmail.com", "www.williegold.com"); + Book book = new Book("Lord of the flies", williamGolding); //Check in item not in collection Assertions.assertEquals("item is not part of the library's collection", library.checkInItem("Lord of the flies")); @@ -27,4 +28,32 @@ public void testAddingCheckInCheckOut(){ Assertions.assertEquals("item has been checked in", library.checkInItem("Lord of the flies")); } + + @Test + public void testGetAuthorInfo(){ + Library library = new Library(); + Author williamGolding = new Author("William Golding", "williegolding@gmail.com", "www.williamexample.com"); + Book book = new Book("Lord of the flies", williamGolding); + + Author JUnitauthor = new Author("Lars Hammar", "larshammar@example.com", "www.larshammarexample.com"); + Article article = new Article("JUnit Rocks", JUnitauthor); + + Newspaper newspaper = new Newspaper("The Daily Java"); + + library.addToStock(book); + library.addToStock(article); + library.addToStock(newspaper); + + Assertions.assertEquals( + "Author: William Golding, eMail: williegolding@gmail.com and website: www.williamexample.com", + library.getInfoAboutAuthor("Lord of the flies")); + + Assertions.assertEquals( + "Author: Lars Hammar, eMail: larshammar@example.com and website: www.larshammarexample.com", + library.getInfoAboutAuthor("JUnit Rocks")); + + Assertions.assertEquals("The newspaper has multiple authors", newspaper.getAuthorInfo()); + } + + } \ No newline at end of file